PubMed Parser adalah perpustakaan Python untuk parsing subset PubMed Open-Access (OA), repositori XML Medline, dan utilitas pemrograman entrez (E-UTILS). Ini menggunakan pustaka lxml untuk menguraikan informasi ini menjadi kamus Python yang dapat dengan mudah digunakan untuk penelitian, seperti dalam penambangan teks dan pipa pemrosesan bahasa alami.
Untuk API yang tersedia dan detail tentang dataset, silakan lihat halaman Wiki atau halaman dokumentasi kami untuk lebih jelasnya. Di bawah ini, kami mencantumkan beberapa contoh core funtionalitionalitas dan kode.
path yang disediakan untuk suatu fungsi dapat menjadi jalur ke file XML terkompresi atau tidak terkompresi. Kami memberikan file contoh di folder data . Di bawah ini, kami mendaftar parser yang tersedia dari pubmed_parser .
Kami membuat parser sederhana untuk subset akses terbuka PubMed di mana Anda dapat memberikan jalur XML atau string ke fungsi yang disebut parse_pubmed_xml yang akan mengembalikan kamus dengan informasi berikut:
full_title : judul artikelabstract : Abstrakjournal : Nama Jurnalpmid : ID PubMedpmc : PubMed Central IDdoi : doi artikelpublisher_id : ID penerbitauthor_list : Daftar penulis dengan kunci afiliasi dalam format berikut [[ 'last_name_1' , 'first_name_1' , 'aff_key_1' ],
[ 'last_name_1' , 'first_name_1' , 'aff_key_2' ],
[ 'last_name_2' , 'first_name_2' , 'aff_key_1' ], ...]affiliation_list : Daftar kunci afiliasi dan string afiliasi dalam format berikut [[ 'aff_key_1' , 'affiliation_1' ],
[ 'aff_key_2' , 'affiliation_2' ], ...]publication_year : tahun publikasisubjects : Daftar subjek yang tercantum dalam artikel yang dipisahkan oleh titik koma. Terkadang, hanya berisi jenis artikel, seperti artikel penelitian, proses peninjauan, dll. import pubmed_parser as pp
dict_out = pp . parse_pubmed_xml ( path ) Fungsi parse_pubmed_references akan memproses file XML Open Access PubMed dan mengembalikan daftar PMID yang dikutip. Setiap kamus memiliki kunci sebagai berikut
pmid : PubMed ID artikelpmc : PubMed ID pusat artikelarticle_title : judul artikel yang dikutipjournal : Nama Jurnaljournal_type : Jenis Jurnalpmid_cited : PubMed ID artikel yang dikutip artikeldoi_cited : doi artikel yang dikutip artikelyear : Tahun publikasi seperti yang muncul dalam referensi (dapat termasuk akhiran surat, EG2007A) dicts_out = pp . parse_pubmed_references ( path ) # return list of dictionary Fungsi parse_pubmed_caption dapat menguraikan teks gambar dari jalur yang diberikan ke file XML. Ini akan mengembalikan indeks referensi yang dapat Anda rujuk kembali ke gambar yang sebenarnya. Fungsi akan mengembalikan daftar kamus yang memiliki kunci berikut
pmid : ID PubMedpmc : PubMed Central IDfig_caption : String of Captionfig_id : ID referensi untuk Gambar (Gunakan untuk merujuk dalam artikel XML)fig_label : label gambargraphic_ref : Referensi ke nama file gambar yang disediakan dari PubMed OA dicts_out = pp . parse_pubmed_caption ( path ) # return list of dictionary Untuk seseorang yang mungkin tertarik untuk mem -parsing teks yang mengelilingi kutipan, perpustakaan juga menyediakan fungsionalitas itu. Anda dapat menggunakan parse_pubmed_paragraph untuk parse teks dan referensi PMIDS. Fungsi ini akan mengembalikan daftar kamus, di mana setiap entri akan memiliki kunci berikut:
pmid : ID PubMedpmc : PubMed Central IDtext : Teks lengkap dari paragrafreference_ids : Daftar kode referensi dalam paragraf itu. ID ini dapat bergabung dengan output dari parse_pubmed_references .
section : Bagian paragraf (misalnya latar belakang, diskusi, lampiran, dll.) dicts_out = pp . parse_pubmed_paragraph ( 'data/6605965a.nxml' , all_paragraph = False ) Anda dapat menggunakan parse_pubmed_table ke tabel parse dari file xml. Fungsi ini akan mengembalikan daftar kamus di mana masing -masing memiliki kunci berikut.
pmid : ID PubMedpmc : PubMed Central IDcaption : Keterangan Tabellabel : lable dari tabeltable_columns : Daftar nama kolomtable_values : Daftar Nilai di Dalam Tabeltable_xml : Teks XML mentah dari tabel (return if return_xml=True ) dicts_out = pp . parse_pubmed_table ( 'data/medline16n0902.xml.gz' , return_xml = False ) Medline XML memiliki format XML yang berbeda dari PubMed Open Access. Struktur file XML dapat ditemukan di Medline/PubMed DTD di sini. Anda dapat menggunakan fungsi parse_medline_xml untuk menguraikan format itu. Fungsi ini akan mengembalikan daftar kamus, di mana setiap elemen berisi:
pmid : ID PubMedpmc : PubMed Central IDdoi : doiother_id : ID lain ditemukan, masing -masing dipisahkan oleh ;title : Judul artikelabstract : Abstrak artikelauthors : Penulis, masing -masing dipisahkan oleh ;mesh_terms : Daftar istilah mesh dengan id mesh yang sesuai, masing -masing dipisahkan oleh ; misalnya 'D000161:Acoustic Stimulation; D000328:Adult; ...publication_types : Daftar daftar jenis publikasi masing -masing dipisahkan oleh ; misalnya 'D016428:Journal Article'keywords : Daftar kata kunci, masing -masing dipisahkan oleh ;chemical_list : Daftar istilah kimia, masing -masing dipisahkan oleh ;pubdate : Tanggal publikasi. Informasi default ke tahun saja.journal : Jurnal makalah yang diberikanmedline_ta : Ini adalah singkatan dari nama jurnalnlm_unique_id : identifikasi unik nlmissn_linking : tautan ISSN, biasanya digunakan untuk menautkan dengan Web of Science Datasetcountry : Negara Diekstraksi dari Bidang Informasi Jurnalreference : String PMID masing -masing dipisahkan oleh ; atau daftar referensi yang dibuat untuk artikeldelete : boolean jika False berarti kertas diperbarui sehingga Anda mungkin memiliki dualanguages : Daftar bahasa, dipisahkan oleh ;vernacular_title : judul vernakular. Default ke string kosong kapan pun tidak tersedia.XMLS untuk makalah yang sama. Anda dapat menghapus catatan kertas yang dihapus karena diperbarui.
dicts_out = pp . parse_medline_xml ( 'data/medline16n0902.xml.gz' ,
year_info_only = False ,
nlm_category = False ,
author_list = False ,
reference_list = False ) # return list of dictionary Untuk mengekstrak informasi bulan dan hari dari pubdate, setel year_info_only=True . Kami juga mengizinkan parsing abstrak terstruktur dan kami dapat mengontrol tampilan dari setiap bagian atau label dengan mengubah argumen nlm_category .
Gunakan parse_grant_id untuk parse ID hibah Medline dari file XML. Ini akan mengembalikan daftar kamus, masing -masing berisi
pmid : ID PubMedgrant_id : ID Grantgrant_acronym : akronim hibahcountry : Negara tempat dana hibah dariagency : Agen Hibah Jika tidak ada ID hibah yang ditemukan, itu tidak akan mengembalikan None
Anda dapat menggunakan PubMed Parser untuk parse file XML dari e-utilitas menggunakan parse_xml_web . Untuk fungsi ini, Anda dapat memberikan pmid tunggal sebagai input dan mendapatkan kamus dengan kunci berikut
title : Judulabstract : Abstrakjournal : Jurnalaffiliation : Afiliasi Penulis Pertamaauthors : String penulis, dipisahkan oleh ;year : Tahun Publikasikeywords : Kata kunci atau istilah mesh dari artikel ini dict_out = pp . parse_xml_web ( pmid , save_xml = False ) Fungsi parse_citation_web memungkinkan Anda untuk mendapatkan kutipan ke ID PubMed atau PubMed Central ID yang diberikan. Ini akan mengembalikan kamus yang berisi kunci berikut
pmc : PubMed Central IDpmid : ID PubMeddoi : doi artikeln_citations : Jumlah kutipan untuk artikel yang diberikanpmc_cited : Daftar PMC yang mengutip PMC yang diberikan dict_out = pp . parse_citation_web ( doc_id , id_type = 'PMC' ) Fungsi parse_outgoing_citation_web memungkinkan Anda untuk mendapatkan artikel yang dikutip artikel yang diberikan, diberikan ID PubMed atau PubMed Central ID. Ini akan mengembalikan kamus yang berisi kunci berikut
n_citations : Jumlah artikel yang dikutipdoc_id : Pengidentifikasi dokumen yang diberikanid_type : Jenis pengidentifikasi yang diberikan. Baik 'PMID' atau 'PMC'pmid_cited : Daftar PMID yang dikutip oleh artikel tersebut dict_out = pp . parse_outgoing_citation_web ( doc_id , id_type = 'PMID' ) Pengidentifikasi harus dilewati sebagai string. PubMed Central ID adalah default, dan harus diteruskan sebagai string tanpa awalan 'PMC' . Jika tidak ada kutipan yang ditemukan, atau jika tidak ada artikel yang ditemukan pencocokan doc_id dalam database yang ditunjukkan, itu tidak akan mengembalikan None .
Anda dapat menginstal versi paling banyak dari paket langsung dari repositori
pip install git+https://github.com/titipata/pubmed_parser.gitatau instal rilis terbaru dengan PYPI menggunakan
pip install pubmed-parser atau klon repositori dan instal menggunakan pip
git clone https://github.com/titipata/pubmed_parser
pip install ./pubmed_parser Anda dapat menguji instalasi Anda dengan menjalankan pytest --cov=pubmed_parser tests/ --verbose di akar repositori.
Contoh penggunaan ditampilkan sebagai berikut
import pubmed_parser as pp
path_xml = pp . list_xml_path ( 'data' ) # list all xml paths under directory
pubmed_dict = pp . parse_pubmed_xml ( path_xml [ 0 ]) # dictionary output
print ( pubmed_dict )
{ 'abstract' : u"Background Despite identical genotypes and ..." ,
'affiliation_list' :
[[ 'I1' : 'Department of Biological Sciences, ...' ],
[ 'I2' : 'Biology Department, Queens College, and the Graduate Center ...' ]],
'author_list' :
[[ 'Dennehy' , 'John J' , 'I1' ],
[ 'Dennehy' , 'John J' , 'I2' ],
[ 'Wang' , 'Ing-Nang' , 'I1' ]],
'full_title' : u'Factors influencing lysis time stochasticity in bacteriophage u03bb ' ,
'journal' : 'BMC Microbiology' ,
'pmc' : '3166277' ,
'pmid' : '21810267' ,
'publication_year' : '2011' ,
'publisher_id' : '1471-2180-11-174' ,
'subjects' : 'Research Article' }Ini adalah cuplikan untuk mengurai semua subset akses terbuka PubMed menggunakan Pyspark 2.1
import os
import pubmed_parser as pp
from pyspark . sql import Row
path_all = pp . list_xml_path ( '/path/to/xml/folder/' )
path_rdd = spark . sparkContext . parallelize ( path_all , numSlices = 10000 )
parse_results_rdd = path_rdd . map ( lambda x : Row ( file_name = os . path . basename ( x ),
** pp . parse_pubmed_xml ( x )))
pubmed_oa_df = parse_results_rdd . toDF () # Spark dataframe
pubmed_oa_df_sel = pubmed_oa_df [[ 'full_title' , 'abstract' , 'doi' ,
'file_name' , 'pmc' , 'pmid' ,
'publication_year' , 'publisher_id' ,
'journal' , 'subjects' ]] # select columns
pubmed_oa_df_sel . write . parquet ( 'pubmed_oa.parquet' , mode = 'overwrite' ) # write dataframeLihat Folder Script untuk informasi lebih lanjut.
dan kontributor
Jika Anda menggunakan PubMed Parser, silakan kutip dari Joss sebagai berikut
Achakulvisut et al., (2020). PubMed Parser: Parser Python untuk subset XML Open-Access Open-Access dan Dataset XML Medline XML. Jurnal Perangkat Lunak Open Source, 5 (46), 1979, https://doi.org/10.21105/joss.01979
atau menggunakan Bibtex
@article{Achakulvisut2020,
doi = {10.21105/joss.01979},
url = {https://doi.org/10.21105/joss.01979},
year = {2020},
publisher = {The Open Journal},
volume = {5},
number = {46},
pages = {1979},
author = {Titipat Achakulvisut and Daniel Acuna and Konrad Kording},
title = {Pubmed Parser: A Python Parser for PubMed Open-Access XML Subset and MEDLINE XML Dataset XML Dataset},
journal = {Journal of Open Source Software}
}
Kami menyambut kontribusi dari siapa pun yang ingin meningkatkan PubMed Parser. Anda dapat membuat masalah GitHub untuk membahas pertanyaan atau masalah yang berkaitan dengan repositori. Kami menyarankan Anda untuk membaca pedoman yang berkontribusi sebelum membuat masalah, melaporkan bug, atau memberikan kontribusi ke repositori.
Paket ini dikembangkan di laboratorium Konrad Kording di University of Pennsylvania. Kami ingin mengucapkan terima kasih kepada pengulas dan editor dari Joss termasuk tleonardi , timClicks , dan majensen . Mereka membuat repositori kami jauh lebih baik!
Lisensi MIT Hak Cipta (C) 2015-2020 Titipat Achakulvisut, Daniel E. Acuna