Open Library adalah perpustakaan online data bibliografi. Perpustakaan menerbitkan kumpulan data lengkap dari semua penulis, karya, dan edisi.
Proyek ini menyediakan instruksi dan skrip untuk mengimpor data ini ke database PostgreSQL, dan beberapa contoh kueri untuk menguji database.
Basis data ini terutama ditujukan untuk menanyakan basis data menggunakan ISBN dan menyertakan tabel khusus untuk pengidentifikasi ini. Hal ini dapat diperluas dengan mengubahnya ke pengidentifikasi lain, seperti ID Perpustakaan Terbuka, atau melakukan kueri berdasarkan judul atau penulis.
Langkah-langkah berikut akan membuat Anda siap dan menjalankan database yang berfungsi.
Open Library menawarkan unduhan massal di situs web mereka, tersedia dari halaman dump data.
Ini diperbarui setiap bulan. Unduhan yang tersedia meliputi (dengan ukuran terkompresi):
Unduh dump data Edisi, Karya, dan Penulis.
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
Pindahkan data dari folder unduhan Anda.
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
Kemudian uncompress file datanya.
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
Sayangnya unduhan yang disediakan sepertinya tidak berfungsi dengan baik untuk diimpor langsung ke PostgreSQL. Kesalahan file perpustakaan terbuka saat diimpor karena jumlah kolom yang disediakan bervariasi. Membersihkannya sulit karena file teks untuk edisi hanya berukuran 25GB.
Catatan: Periksa apakah ini masih terjadi dan jika demikian, mungkin ada beberapa alat Linux untuk melakukan ini - mungkin coba sed
dan awk
Itu bisa diatasi dengan skrip python. File openlibrary_data_process.py dibaca dalam file teks dan menuliskannya lagi untuk setiap baris, tetapi hanya jika terdapat 5 kolom.
python openlibrary_data_process.py
Karena filenya sangat besar dan akan terus bertambah (edisi sekarang 45 GB+) Anda dapat menggunakan file openlibrary_data_process_chunked.py
untuk membagi data menjadi file yang lebih kecil untuk dimuat secara berurutan. Anda dapat mengubah jumlah baris di setiap bagian. Defaultnya adalah 2 juta.
Setelah file dipecah, Anda dapat menghapus 3 file .txt di folder yang tidak terkompresi karena Anda memerlukan sekitar 250 Gb ruang kosong untuk memuat ketiga file ke dalam database tanpa mengalami kesalahan kekurangan ruang. Jika Anda memiliki banyak ruang, Anda dapat menyimpan file!
python openlibrary_data_process_chunked.py
Ini menghasilkan banyak file ke dalam direktori data/processed
.
Salah satu file tersebut akan digunakan untuk mengakses file lainnya saat memuat data.
Data kemudian dapat diimpor langsung ke tabel PostgreSQL dan melakukan pencarian kompleks dengan SQL.
Ada serangkaian skrip database yang akan membuat database dan tabel, lalu mengimpor data. Ini ada di folder database. File data (yang dibuat pada proses sebelumnya) harus berada dalam folder data/processed
agar dapat berfungsi.
Alat baris perintah database PostgreSQL psql
digunakan untuk menjalankan skrip. Perintah berikut akan membuat database dan tabel:
psql --set=sslmode=require -f openlibrary-db.sql -h localhost -p 5432 -U username postgres
Basis data dibagi menjadi 5 tabel utama
Data | Keterangan |
---|---|
Penulis | Pengarang adalah orang yang menulis suatu karya |
Bekerja | Karya yang dibuat oleh penulis, dengan judul, dan subjudul |
Penulis Bekerja | Tabel yang menghubungkan karya dengan penulis |
Edisi | Edisi tertentu dari karya tersebut, termasuk ISBN |
Edisi ISBN | ISBN untuk edisinya |
Itulah pengaturan database - sekarang dapat ditanyakan menggunakan SQL.
Dapatkan detail untuk satu item menggunakan ISBN13 9781551922461 (Harry Potter dan Tahanan 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 '