Открытая библиотека — онлайн-библиотека библиографических данных. Библиотека публикует полные дампы данных всех авторов, произведений и изданий.
Этот проект предоставляет инструкции и сценарии для импорта этих данных в базу данных PostgreSQL, а также несколько примеров запросов для тестирования базы данных.
База данных в первую очередь предназначена для запроса базы данных с использованием ISBN и включает таблицы специально для этих идентификаторов. Его можно расширить, чтобы изменить его на другие идентификаторы, такие как идентификатор открытой библиотеки, или выполнить запрос по названию или автору.
Следующие шаги помогут вам начать работу с рабочей базой данных.
Open Library предлагает массовую загрузку на своем веб-сайте, доступную на странице дампов данных.
Они обновляются каждый месяц. Доступные загрузки включают (в сжатом размере):
Загрузите дампы данных «Издания», «Работы» и «Авторы».
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
Переместите данные из папки загрузок.
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
Затем распакуйте файлы данных.
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
К сожалению, предоставленные загрузки не подходят для прямого импорта в PostgreSQL. Ошибки файла открытой библиотеки при импорте, поскольку количество предоставляемых столбцов варьируется. Очистить его сложно, так как только текстовый файл для редакций занимает 25 ГБ.
Примечание. Проверьте, так ли это по-прежнему, и если да, то для этого могут быть какие-нибудь инструменты Linux — возможно, попробуйте sed
и awk
Это можно решить с помощью скрипта Python. Файл openlibrary_data_process.py считывает текстовый файл и записывает его снова для каждой строки, но только там, где имеется 5 столбцов.
python openlibrary_data_process.py
Поскольку файлы огромны и будут только расти (теперь размер редакций составляет более 45 ГБ), вы можете использовать файл openlibrary_data_process_chunked.py
, чтобы разделить данные на более мелкие файлы для последовательной загрузки. Вы можете изменить количество строк в каждом фрагменте. По умолчанию — 2 миллиона.
После разделения файлов вы можете удалить 3 файла .txt в несжатой папке, поскольку вам понадобится около 250 ГБ свободного места для загрузки всех 3 файлов в базу данных без возникновения ошибок нехватки места. Если у вас достаточно места, вы можете сохранить файлы!
python openlibrary_data_process_chunked.py
Это создает несколько файлов в каталоге data/processed
.
Один из этих файлов будет использоваться для доступа к остальным при загрузке данных.
После этого можно импортировать данные непосредственно в таблицы PostgreSQL и выполнять сложный поиск с помощью SQL.
Существует ряд сценариев базы данных, которые создают базу данных и таблицы, а затем импортируют данные. Они находятся в папке базы данных. Чтобы это работало, файлы данных (созданные в предыдущем процессе) должны находиться в папке data/processed
.
Для запуска сценариев используется инструмент командной строки базы данных PostgreSQL psql
. Следующая команда создаст базу данных и таблицы:
psql --set=sslmode=require -f openlibrary-db.sql -h localhost -p 5432 -U username postgres
База данных разделена на 5 основных таблиц.
Данные | Описание |
---|---|
Авторы | Авторы – это лица, написавшие произведения |
Работает | Работы в том виде, в котором они созданы авторами, с названиями и субтитрами. |
Авторские работы | Таблица, связывающая произведения с авторами |
Издания | Отдельные издания произведений, включая ISBN. |
ISBN издания | ISBN для изданий |
База данных настроена — теперь к ней можно обращаться с помощью SQL.
Получите подробную информацию об одном предмете, используя ISBN13 9781551922461 (Гарри Поттер и узник Азкабана):
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 '