Open Library es una biblioteca en línea de datos bibliográficos. La biblioteca publica volcados de datos completos de todos los autores, obras y ediciones.
Este proyecto proporciona instrucciones y scripts para importar estos datos a una base de datos PostgreSQL y algunas consultas de muestra para probar la base de datos.
La base de datos está destinada principalmente a consultar la base de datos mediante ISBN e incluye tablas específicamente para estos identificadores. Podría ampliarse para cambiar esto a otros identificadores, como Open Library ID, o para consultar por título o autor.
Los siguientes pasos le ayudarán a empezar a utilizar una base de datos funcional.
Open Library ofrece descargas masivas en su sitio web, disponibles en la página de volcados de datos.
Estos se actualizan cada mes. Las descargas disponibles incluyen (con tamaño comprimido):
Descarga los volcados de datos de Ediciones, Obras y Autores.
wget https://openlibrary.org/data/ol_dump_editions_latest.txt.gz -P ~/downloads
wget https://openlibrary.org/data/ol_dump_works_latest.txt.gz -P ~/downloads
wget https://openlibrary.org/data/ol_dump_authors_latest.txt.gz -P ~/downloads
Mueva los datos de su carpeta de descargas.
mv ~/downloads/ol_dump_authors_*txt.gz ./data/unprocessed/ol_dump_authors.txt.gz
mv ~/downloads/ol_dump_works_*txt.gz ./data/unprocessed/ol_dump_works.txt.gz
mv ~/downloads/ol_dump_editions_*txt.gz ./data/unprocessed/ol_dump_editions.txt.gz
Luego descomprima los archivos de datos.
gzip -d -c data/unprocessed/ol_dump_editions.txt.gz > data/unprocessed/ol_dump_editions.txt
gzip -d -c data/unprocessed/ol_dump_works.txt.gz > data/unprocessed/ol_dump_works.txt
gzip -d -c data/unprocessed/ol_dump_authors.txt.gz > data/unprocessed/ol_dump_authors.txt
Lamentablemente, las descargas proporcionadas no parecen funcionar bien para la importación directa a PostgreSQL. El archivo de biblioteca abierto produce errores al importar, ya que el número de columnas proporcionadas varía. Limpiarlo es difícil ya que sólo el archivo de texto de las ediciones tiene 25 GB.
Nota: Compruebe si este sigue siendo el caso y, de ser así, podría haber algunas herramientas de Linux para hacer esto; tal vez pruebe con sed
y awk
Esto se puede solucionar con un script en Python. El archivo openlibrary_data_process.py lee el archivo de texto y lo escribe nuevamente para cada fila, pero solo donde hay 5 columnas.
python openlibrary_data_process.py
Debido a que los archivos son enormes y solo van a crecer (las ediciones ahora son de 45 GB o más), puede usar el archivo openlibrary_data_process_chunked.py
para dividir los datos en archivos más pequeños para cargarlos secuencialmente. Puede cambiar el número de líneas en cada fragmento. El valor predeterminado es 2 millones.
Una vez que los archivos estén divididos, puede eliminar los 3 archivos .txt en la carpeta sin comprimir porque necesitará alrededor de 250 Gb de espacio libre para cargar los 3 archivos en la base de datos sin encontrar errores de falta de espacio. Si tienes suficiente espacio, ¡puedes conservar los archivos!
python openlibrary_data_process_chunked.py
Esto genera múltiples archivos en el directorio data/processed
.
Uno de esos archivos se utilizará para acceder al resto al cargar los datos.
Luego es posible importar los datos directamente a tablas de PostgreSQL y realizar búsquedas complejas con SQL.
Hay una serie de scripts de bases de datos que crearán la base de datos y las tablas, y luego importarán los datos. Estos están en la carpeta de la base de datos. Los archivos de datos (creados en el proceso anterior) deben estar dentro de la carpeta data/processed
para que esto funcione.
La herramienta de línea de comandos de la base de datos PostgreSQL psql
se utiliza para ejecutar los scripts. El siguiente comando creará la base de datos y las tablas:
psql --set=sslmode=require -f openlibrary-db.sql -h localhost -p 5432 -U username postgres
La base de datos se divide en 5 tablas principales.
Datos | Descripción |
---|---|
Autores | Los autores son las personas que escriben las obras. |
Obras | Las obras creadas por los autores, con títulos y subtítulos. |
Obras del autor | Una tabla que relaciona las obras con los autores. |
Ediciones | Las ediciones particulares de las obras, incluidos los ISBN. |
ISBN de edición | Los ISBN de las ediciones. |
Esa es la base de datos configurada; ahora se puede consultar usando SQL.
Obtenga detalles de un solo artículo utilizando el ISBN13 9781551922461 (Harry Potter y el prisionero de Azkaban):
select
e . data - >> ' title ' " EditionTitle " ,
w . data - >> ' title ' " WorkTitle " ,
a . data - >> ' name ' " Name " ,
e . data - >> ' subtitle ' " EditionSubtitle " ,
w . data - >> ' subtitle ' " WorkSubtitle " ,
e . data - >> ' subjects ' " Subjects " ,
e . data - > ' description ' - >> ' value ' " EditionDescription " ,
w . data - > ' description ' - >> ' value ' " WorkDescription " ,
e . data - > ' notes ' - >> ' value ' " EditionNotes " ,
w . data - > ' notes ' - >> ' value ' " WorkNotes "
from editions e
join edition_isbns ei
on ei . edition_key = e . key
join works w
on w . key = e . work_key
join author_works a_w
on a_w . work_key = w . key
join authors a
on a_w . author_key = a . key
where ei . isbn = ' 9781551922461 '