Actividad intermedia: Construye un programa real#

En esta actividad vamos a construir un programa que nos permita consultar una biblioteca de referencias bibliográficas. El programa debe permitirnos consultar la bibliografía por título, autor, año de publicación y palabras claves.

Sobre el conjunto de datos#

Para realizar este ejercicio, les brindamos un conjunto de referencias bibliográficas exportadas desde el programa Zotero las cuales pueden visualizar en el repositorio del curso.

Este conjunto de datos contiene la siguiente información:

Número de elementos en la biblioteca: 757

Tipos de elementos: ['article-journal', 'article-magazine', 'article-newspaper', 'book', 'broadcast', 'chapter', 'document', 'entry-encyclopedia', 'interview', 'motion_picture', 'paper-conference', 'post-weblog', 'thesis', 'webpage']

Claves de los elementos: ['DOI', 'ISBN', 'ISSN', 'URL', 'abstract', 'accessed', 'archive', 'archive_location', 'author', 'call-number', 'collection-number', 'collection-title', 'container-title', 'contributor', 'dimensions', 'director', 'edition', 'editor', 'event-place', 'event-title', 'genre', 'guest', 'id', 'issue', 'issued', 'journalAbbreviation', 'language', 'license', 'medium', 'note', 'number-of-pages', 'number-of-volumes', 'page', 'performer', 'producer', 'publisher', 'publisher-place', 'source', 'title', 'title-short', 'translator', 'type', 'volume']

Importante

Es sumamente recomendable (por no decir obligatorio) que realicen una revisión de la estructura y contenido del conjunto de datos antes de iniciar la escritura del programa. Por ejemplo, cuántos elementos hay por cada tipo, qué claves tiene cada tipo de elemento, cuáles de estas claves son obligatorias, etc.

Acceder al conjunto de datos#

El archivo contiene una biblioteca de citas bibliográficas en formato CSL-JSON. La biblioteca está construida a partir de una exportación de elementos de Zotero en el formato CSL-JSON. En esta estructura, cada elemento un diccionario dentro de una lista. Cada diccionario contiene una serie de pares clave-valor.

Para facilitar la recuperación de la información y evitar duplicar innecesariamente los datos, he creado el módulo biblioteca.py (ubicado en codigo/actividad_intermedia/biblioteca.py) que contiene una función llamada biblioteca que se encarga de descargar y leer el conjunto de datos.

Para usarlo, debes copiar el archivo biblioteca.py en tu carpeta de trabajo y luego importar la función biblioteca en un nuevo archivo de Python:

from biblioteca import biblioteca

También deberás instalar las dependencias necesarias para que el programa se ejecute correctamente. Para ello, debes ejecutar el siguiente comando en la terminal:

py -m pip install -U pip
py -m pip install -U requests

Importante

Puede que la primera instrucción no funcione en tu computadora. En ese caso, debes ejecutar el comando python -m pip install -U pip en lugar de py -m pip install -U pip.

Desde un sistema operativo Mac, debes ejecutar el comando python3 -m pip install -U pip en lugar de py -m pip install -U pip.

Sigue la misma lógica para instalar las dependencias de requests.

Prueba que la importación sea correcta. En caso de que no lo sea y obtengas un error de ModuleNotFoundError o ImportError, revisa que el archivo biblioteca.py se encuentre en la misma carpeta de trabajo que el archivo donde estás escribiendo el código.

Advertencia

No debes escribir en el código del módulo biblioteca.py ni borrar el archivo del directorio original. De otra manera puedes encontrar errores de importación o afectar el funcionamiento de los programas de tus compañeros.

Acceder a los elementos de la biblioteca#

Debido a que la biblioteca es una lista de diccionarios, podemos acceder a cada elemento de la biblioteca usando la sintaxis de listas.

Por ejemplo, para acceder al primer elemento de la biblioteca, podemos usar la siguiente sintaxis:

from biblioteca import biblioteca

biblioteca = biblioteca()

print(biblioteca[0])
{'id': 'Paz-Trillo.etal2005information', 'type': 'article-journal', 'container-title': 'Journal of the Brazilian Computer Society', 'DOI': '10/bq8g32', 'ISSN': '0104-6500, 1678-4804', 'issue': '2', 'language': 'en', 'note': 'number: 2\n00022', 'page': '17-31', 'source': 'CrossRef', 'title': 'An information retrieval application using ontologies', 'URL': 'http://link.springer.com/10.1007/BF03192373', 'volume': '11', 'author': [{'family': 'Paz-Trillo', 'given': 'Christian'}, {'family': 'Wassermann', 'given': 'Renata'}, {'family': 'Braga', 'given': 'Paula P.'}], 'accessed': {'date-parts': [['2016', 11, 15]]}, 'issued': {'date-parts': [['2005', 6]]}}

Y en este ejemplo, si queremos acceder al valor de la clave title, podemos usar la siguiente sintaxis:

print(biblioteca[0]['title'])
An information retrieval application using ontologies

En este sentido, un buscador deberá iterar sobre todo el diccionario y comparar el valor de cada clave con el valor de búsqueda. Por ejemplo, si queremos buscar un elemento por título, podemos usar la siguiente sintaxis para encontrar una coincidencia exacta:

from biblioteca import biblioteca

titulo = '¿Qué son las Humanidades Digitales?'

for elemento in biblioteca():
    if elemento['title'].lower() == titulo.lower():
        print(elemento)
{'id': 'Afanador2019Que', 'type': 'motion_picture', 'abstract': 'Maria José Afanador, profesora de la Maestría en Humanidades Digitales de la Universidad de los Andes, explica qué son las Humanidades Digitales y cuál es su pertinencia en la actualidad.', 'dimensions': '0:56', 'note': 'Directors: _:n3225', 'source': 'YouTube', 'title': '¿Qué son las Humanidades Digitales?', 'URL': 'https://www.youtube.com/watch?v=otNSk8oNz8k', 'director': [{'family': 'Afanador', 'given': 'María José'}], 'accessed': {'date-parts': [['2019', 10, 14]]}, 'issued': {'date-parts': [['2019', 10, 14]]}}
{'id': 'GalinaRussell2011Que', 'type': 'article-journal', 'container-title': 'Revista digital universitaria', 'issue': '7', 'note': 'ZSCC: 0000080', 'page': '3-10', 'title': '¿Qué son las humanidades digitales?', 'URL': 'http://www.revista.unam.mx/vol.12/num7/art68/art68.pdf', 'volume': '12', 'author': [{'family': 'Galina Russell', 'given': 'Isabel'}], 'issued': {'date-parts': [['2011']]}}

Instrucciones#

1. Construir el módulo de búsquedas#

El primer paso es construir un módulo que permita realizar búsquedas en la biblioteca. Para esto, debes crear un nuevo archivo de Python en la carpeta de trabajo con el nombre busqueda.py.

Este archivo debe tener una función para realizar búsquedas con las siguientes condiciones:

  • Debe buscar por título, autor, año de publicación y palabras claves.

  • Debe tener la opción de buscar por libro, artículo, tesis o cualquier otro tipo de elemento.

  • Debe tener la opción de buscar por coincidencia exacta o por coincidencia parcial.

  • Debe tener la capacidad de formatear el resultado para hacerlo legible al usuario.

  • Debe poder lidiar con el tipo de dato de los autores (list) y de las fechas (dict).

Este módulo debe tener un conjunto de funciones que permitan hacer estas tareas.

Debe tener por lo menos dos funciones:

  • Una función que permita buscar por título, autor, año de publicación y palabras claves.

  • Una función que permita formatear el resultado de la búsqueda.

El módulo debe estar en la capacidad de replicar un resultado como el siguiente:

from busqueda import busqueda_simple, formar_result

# Buscar la palabra "Data" en el título de los libros
resultado = busqueda_simple('Data', 'title', 'book')
print(formar_result(resultado))
[1]------------

id: AdrianCaballeroRoldan2019Bid
type: book
abstract: rare book
ISBN: 978-84-948972-0-7
language: Spanish
note: 00000
publisher: RC Libros
source: Amazon
title: Bid data con Python. Recolección, almacenamiento y proceso
author: Adrián Caballero Roldán, Rafael Caballero / Martín Martín
issued: 2019
-----------------

[2]------------

id: Hamidovic.etal2019Ancient
type: book
abstract: Ancient Manuscripts in Digital Culture presents an overview of the digital turn in Ancient Jewish and Christian manuscripts visualisation, data mining and communication. Edited by David Hamidović, Claire Clivaz and Sarah Bowen Savant, it gathers together the contributions of seventeen scholars involved in Biblical, Early Jewish and Christian studies. The volume attests to the spreading of digital humanities in these fields and presents fundamental analysis of the rise of visual culture as well as specific test-cases concerning ancient manuscripts. Sophisticated visualisation tools, stylometric analysis, teaching and visual data, epigraphy and visualisation belong notably to the varied overview presented in the volume.
collection-number: 3
collection-title: Digital Biblical Studies
edition: 1ª
event-place: Leiden - Boston
ISBN: 978-90-04-39929-7
language: English
note: ZSCC: 0000001
number-of-pages: xvi, 284
number-of-volumes: 1
publisher: Brill
publisher-place: Leiden - Boston
title: Ancient Manuscripts in Digital Culture. Visualisation, Data Mining, Communication
URL: https://doi.org/10.1163/9789004399297
volume: 1
editor: Hamidović, D.; Clivaz, C.; Bowen Savant, S.
issued: 2019
-----------------

[3]------------

id: Gitelman2013Rawa
type: book
call-number: Q355 .R385 2013
collection-title: Infrastructures series
event-place: Cambridge, Massachusetts ; London, England
ISBN: 978-0-262-51828-4
number-of-pages: 182
publisher: The MIT Press
publisher-place: Cambridge, Massachusetts ; London, England
source: Library of Congress ISBN
title: "Raw data" is an oxymoron
editor: Gitelman, Lisa
issued: 2013
-----------------

[4]------------

id: Flanders.Jannidis2019shapea
type: book
abstract: "Data and its technologies now play a large and growing role in humanities research and teaching. This book addresses the needs of humanities scholars who seek deeper expertise in the area of data modeling and representation. The authors, all experts in digital humanities, offer a clear explanation of key technical principles, a grounded discussion of case studies, and an exploration of important theoretical concerns. The book opens with an orientation, giving the reader a history of data modeling in the humanities and a grounding in the technical concepts necessary to understand and engage with the second part of the book. The second part of the book is a wide-ranging exploration of topics central for a deeper understanding of data modeling in digital humanities. Chapters cover data modeling standards and the role they play in shaping digital humanities practice, traditional forms of modeling in the humanities and how they have been transformed by digital approaches, ontologies which seek to anchor meaning in digital humanities resources, and how data models inhabit the other analytical tools used in digital humanities research. It concludes with a glossary chapter that explains specific terms and concepts for data modeling in the digital humanities context. This book is a unique and invaluable resource for teaching and practising data modeling in a digital humanities context"--
call-number: AZ105 .S43 2019
collection-title: Digital research in the arts and humanities
event-place: London ; New York
ISBN: 978-1-4724-4324-3
number-of-pages: 341
publisher: Routledge, Taylor & Francis Group
publisher-place: London ; New York
source: Library of Congress ISBN
title: The shape of data in the digital humanities: modeling texts and text-based resources
title-short: The shape of data in the digital humanities
editor: Flanders, Julia; Jannidis, Fotis
issued: 2019
-----------------

Se encontraron 4 resultados

2. Construir el módulo de interfaz#

El segundo paso es construir un módulo que permita interactuar con el usuario. Para esto, debes crear un nuevo archivo de Python en la carpeta de trabajo con el nombre buscador.py.

Este archivo debe tener una función que permita interactuar con el usuario. Esta función debe tener un menú que permita al usuario elegir entre las siguientes opciones:

  • Ingresar la palabra clave de búsqueda.

  • Seleccionar si se desea buscar por título, autor, fecha o palabra clave.

  • Seleccionar si se desea filtrar por libro, artículo, tesis o cualquier otro tipo de elemento.

El módulo debe estar en la capacidad de replicar un resultado como el siguiente:

Ingrese los datos de la búsqueda
Palabra a buscar: Data
Tipos de búsqueda: [1] Título, [2] Autor, [3] Fecha, [4] Palabra clave
Tipo de búsqueda (1, 2, 3, 4): 1
Tipos de documento: [1] Libro, [2] Artículo, [3] Tesis, [4] Cualquiera
Tipo de documento (1, 2, 3, 4): 1
Buscando 'Data' en 'title' de tipo 'book'


[1]------------

id: AdrianCaballeroRoldan2019Bid
type: book
abstract: rare book
ISBN: 978-84-948972-0-7
language: Spanish
note: 00000
publisher: RC Libros
source: Amazon
title: Bid data con Python. Recolección, almacenamiento y proceso
author: Adrián Caballero Roldán, Rafael Caballero / Martín Martín
issued: 2019
-----------------

[2]------------

id: Hamidovic.etal2019Ancient
type: book
abstract: Ancient Manuscripts in Digital Culture presents an overview of the digital turn in Ancient Jewish and Christian manuscripts visualisation, data mining and communication. Edited by David Hamidović, Claire Clivaz and Sarah Bowen Savant, it gathers together the contributions of seventeen scholars involved in Biblical, Early Jewish and Christian studies. The volume attests to the spreading of digital humanities in these fields and presents fundamental analysis of the rise of visual culture as well as specific test-cases concerning ancient manuscripts. Sophisticated visualisation tools, stylometric analysis, teaching and visual data, epigraphy and visualisation belong notably to the varied overview presented in the volume.
collection-number: 3
collection-title: Digital Biblical Studies
edition: 1ª
event-place: Leiden - Boston
ISBN: 978-90-04-39929-7
language: English
note: ZSCC: 0000001
number-of-pages: xvi, 284
number-of-volumes: 1
publisher: Brill
publisher-place: Leiden - Boston
title: Ancient Manuscripts in Digital Culture. Visualisation, Data Mining, Communication
source: Library of Congress ISBN
title: The shape of data in the digital humanities: modeling texts and text-based resources
title-short: The shape of data in the digital humanities
editor: Flanders, Julia; Jannidis, Fotis
issued: 2019
-----------------

Se encontraron 4 resultados

Envío de la actividad#

Al igual que las actividades anteriores, envía tu código a través de Github.

Para entregar la actividad, debes hacer un commit de los modificados y hacer un push de tu brazo al repositorio remoto.

git add .
git commit -m "Entrega de la actividad intermedia"
git push -u origin nombre-del-brazo