PubMed Parser是用於解析PubMed開放式(OA)子集,MEDLINE XML存儲庫和Entrez編程實用程序(E-UTILS)的Python庫。它使用lxml庫將這些信息解析為Python詞典,該詞典可以輕鬆用於研究,例如在文本挖掘和自然語言處理管道中。
有關可用的API和有關數據集的詳細信息,請參閱我們的Wiki頁面或文檔頁面以獲取更多詳細信息。下面,我們列出了一些核心功能和代碼示例。
path可以是壓縮或未壓縮XML文件的路徑。我們在data文件夾中提供示例文件。下面,我們列出了pubmed_parser的可用解析器。
我們為PubMed Open Access子集創建了一個簡單的解析器,您可以在其中為XML路徑或字符串提供稱為parse_pubmed_xml的函數,該功能將返回帶有以下信息的字典:
full_title :文章的標題abstract :摘要journal :期刊名稱pmid :PubMed IDpmc :PubMed Central IDdoi :文章的doipublisher_id :發布者IDauthor_list :具有以下格式的隸屬鍵的作者列表 [[ '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 :以下格式的隸屬鍵和隸屬字符串列表 [[ 'aff_key_1' , 'affiliation_1' ],
[ 'aff_key_2' , 'affiliation_2' ], ...]publication_year :出版年度subjects :由分號分隔的文章中列出的主題列表。有時,它僅包含文章的類型,例如研究文章,審查程序等。 import pubmed_parser as pp
dict_out = pp . parse_pubmed_xml ( path )函數parse_pubmed_references將處理PubMed Open Access XML文件,並返回其引用的PMID列表。每個詞典都有如下鍵
pmid :文章的PubMed IDpmc :文章的PubMed Central IDarticle_title :引用文章的標題journal :期刊名稱journal_type :期刊類型pmid_cited :文章引用的文章的PubMed IDdoi_cited :文章引用的文章的doiyear :參考文獻中出現的出版年(可能包括字母后綴,EG2007A) dicts_out = pp . parse_pubmed_references ( path ) # return list of dictionary函數parse_pubmed_caption可以從給定路徑到XML文件解析圖像標題。它將返回您可以將其引用到實際圖像的參考索引。該函數將返回具有以下鍵的字典列表
pmid :PubMed IDpmc :PubMed Central IDfig_caption :字符串字符串fig_id :圖形的參考ID(用於XML文章中的參考)fig_label :圖的標籤graphic_ref :引用來自PubMed OA提供的圖像文件名 dicts_out = pp . parse_pubmed_caption ( path ) # return list of dictionary對於可能有興趣解析圍繞引文的文本感興趣的人,庫還提供了該功能。您可以使用parse_pubmed_paragraph來解析文本和參考pmids。此函數將返回詞典列表,每個條目將具有以下鍵:
pmid :PubMed IDpmc :PubMed Central IDtext :段落的全文reference_ids :該段中的參考代碼列表。此ID可以與parse_pubmed_references的輸出合併。
section :段落部分(例如背景,討論,附錄等) dicts_out = pp . parse_pubmed_paragraph ( 'data/6605965a.nxml' , all_paragraph = False )您可以將parse_pubmed_table從XML文件使用到解析表。此功能將返回每個具有以下鍵的字典列表。
pmid :PubMed IDpmc :PubMed Central IDcaption :桌子標題label :桌子的款項table_columns :列名列表table_values :表中的值列表table_xml :表的RAW XML文本(如果return_xml=True返回) dicts_out = pp . parse_pubmed_table ( 'data/medline16n0902.xml.gz' , return_xml = False ) Medline XML的XML格式與PubMed Open Access不同。 XML文件的結構可以在此處的Medline/PubMed DTD中找到。您可以使用函數parse_medline_xml來解析該格式。此函數將返回字典列表,其中每個元素包含:
pmid :PubMed IDpmc :PubMed Central IDdoi :doiother_id :找到其他ID,每個ID被分開;title :文章的標題abstract :文章的摘要authors :作者,每個人都分開;mesh_terms :帶有相應網格ID的網格術語列表,每個列表由;例如'D000161:Acoustic Stimulation; D000328:Adult; ...publication_types :出版物類型列表列表列表每個分開;例如'D016428:Journal Article'keywords :關鍵字列表,每個列表都被;chemical_list :化學術語列表,每個術語均分開;pubdate :出版日期。僅默認為年度信息。journal :給定論文的雜誌medline_ta :這是期刊名稱的縮寫nlm_unique_id :NLM唯一標識issn_linking :ISSN鏈接,通常用於與Web of Science數據集鏈接country :從期刊信息領域提取的國家reference :PMID的字符串每個分開;或對文章的參考列表delete :布爾值False表示紙張已更新,因此您可能有兩個languages :語言列表,分開;vernacular_title :白話標題。默認為空字符串時,每當不可用。XML的同一張紙。您可以刪除已刪除紙的記錄,因為它已更新。
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要從PubDate中提取月和日信息,請設置year_info_only=True 。我們還允許解析結構化的摘要,並且可以通過更改nlm_category參數來控制每個部分或標籤的顯示。
使用parse_grant_id來解析XML文件中的Medline Grant ID。這將返回一個字典列表,每個詞典包含
pmid :PubMed IDgrant_id :授予IDgrant_acronym :Grant的首字母縮寫詞country :來自贈款的國家 /地區agency :贈款代理如果找不到贈款ID,它將None返回
您可以使用parse_xml_web使用PubMed Parser從e-utitions解析XML文件。對於此功能,您可以提供一個pmid作為輸入,並獲取帶有以下鍵的字典
title :標題abstract :摘要journal :期刊affiliation :第一作者的隸屬關係authors :作者串,分開;year :出版年份keywords :文章的關鍵字或網格術語 dict_out = pp . parse_xml_web ( pmid , save_xml = False )該函數parse_citation_web允許您將引用轉到給定的PubMed ID或PubMed Central ID。這將返回包含以下鍵的字典
pmc :PubMed Central IDpmid :PubMed IDdoi :文章的doin_citations :給定文章的引用數量pmc_cited :引用給定PMC的PMC列表 dict_out = pp . parse_citation_web ( doc_id , id_type = 'PMC' )函數parse_outgoing_citation_web允許您獲得給定文章引用的文章,給定的PubMed ID或PubMed Central ID。這將返回包含以下鍵的字典
n_citations :引用的文章數量doc_id :給定的文檔標識符id_type :給出的標識符類型。 'PMID'或'PMC'pmid_cited :文章引用的PMID列表 dict_out = pp . parse_outgoing_citation_web ( doc_id , id_type = 'PMID' )標識符應作為字符串通過。 PubMed Central ID是默認的,應作為字符串傳遞,而沒有'PMC'前綴。如果找不到引用,或者找不到與指示數據庫中doc_id匹配的文章,則None返回。
您可以直接從存儲庫安裝包裝的最新版本
pip install git+https://github.com/titipata/pubmed_parser.git或使用PYPI安裝最新版本
pip install pubmed-parser或克隆存儲庫並使用pip安裝
git clone https://github.com/titipata/pubmed_parser
pip install ./pubmed_parser您可以通過運行pytest --cov=pubmed_parser tests/ --verbose在存儲庫的根部測試安裝。
示例用法如下顯示
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' }這是一個使用Pyspark 2.1解析所有PubMed Open Access子集的片段
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 dataframe有關更多信息,請參見腳本文件夾。
和貢獻者
如果您使用PubMed Parser,請從Joss引用如下
Achakulvisut等,(2020)。 PubMed Parser:PubMed開放式XML子集和MEDLINE XML DATASET XML數據集的Python Parser。開源軟件雜誌,5(46),1979,https://doi.org/10.21105/joss.01979
或使用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}
}
我們歡迎任何想改善PubMed Parser的人的捐款。您可以創建GitHub問題,以討論與存儲庫有關的問題。我們建議您在創建問題,報告錯誤或對存儲庫做出貢獻之前閱讀我們的貢獻指南。
該包裝是在賓夕法尼亞大學Konrad Kording的實驗室開發的。我們要感謝包括tleonardi , timClicks和majensen在內的Joss的評論者和編輯。他們使我們的存儲庫變得更好!
MIT許可證版權(C)2015-2020 Titipat Achakulvisut,Daniel E. Acuna