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