Project Icon

pubmed_parser

Python解析库:PubMed和MEDLINE XML数据

Pubmed Parser是一个Python库,用于解析PubMed开放获取(OA)子集和MEDLINE XML数据集。该库使用lxml库将信息转换为Python字典,适用于文本挖掘和自然语言处理。功能涵盖文章信息、参考文献、图片说明、段落、表格及资助信息的解析。更多详情和应用实例,请参考API和文档。

Pubmed Parser: 用于解析PubMed开放获取XML子集和MEDLINE XML数据集的Python解析器

License DOI DOI Build Status

Pubmed Parser是一个Python库,用于解析PubMed开放获取(OA)子集MEDLINE XML资源库和Entrez Programming Utilities(E-utils)。它使用lxml库将这些信息解析成Python字典,方便在研究中使用,例如文本挖掘和自然语言处理管道中。

有关可用API和数据集的详细信息,请参见我们的wiki页面文档页面。以下是一些核心功能和代码示例。

可用的解析器

  • 提供给函数的path可以是压缩或未压缩的XML文件路径。我们在data文件夹中提供了示例文件。
  • 对于网站解析,你应该间隔爬取。请参见版权通知,因为如果你尝试批量下载,你的IP可能会被封锁。

以下是pubmed_parser中可用的解析器列表。

解析PubMed OA XML信息

我们为PubMed开放获取子集创建了一个简单的解析器,你可以将XML路径或字符串传递给parse_pubmed_xml函数,它将返回包含以下信息的字典:

  • full_title : 文章标题
  • abstract : 摘要
  • journal : 期刊名称
  • pmid : PubMed ID
  • pmc : PubMed Central ID
  • doi : 文章的DOI
  • publisher_id : 出版商ID
  • author_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)

解析PubMed OA引用参考文献

函数parse_pubmed_references将处理一个Pubmed开放获取XML文件,并返回它引用的PMID列表。每个字典的键如下

  • pmid : 文章的PubMed ID
  • pmc : 文章的PubMed Central ID
  • article_title : 被引用文章的标题
  • journal : 期刊名称
  • journal_type : 期刊类型
  • pmid_cited : 被引用文章的PubMed ID
  • doi_cited : 被引用文章的DOI
  • year : 参考文献中出现的出版年份(可能包括字母后缀,例如2007a)
dicts_out = pp.parse_pubmed_references(path) # 返回字典列表

解析PubMed OA图像和标题

函数parse_pubmed_caption可以从给定的XML文件路径解析图像标题。它将返回可以参考实际图像的引用索引。该函数将返回包含以下键的字典列表

  • pmid : PubMed ID
  • pmc : PubMed Central ID
  • fig_caption : 标题字符串
  • fig_id : 图形的参考ID(用于在XML文章中引用)
  • fig_label : 图形的标签
  • graphic_ref : 从Pubmed OA提供的图像文件名称参考
dicts_out = pp.parse_pubmed_caption(path) # 返回字典列表

解析PubMed OA段落

对于可能有兴趣解析引用周围文本的人,该库也提供了此功能。你可以使用parse_pubmed_paragraph解析文本和参考PMIDs。此函数将返回字典列表,每个条目具有以下键:

  • pmid : PubMed ID
  • pmc : PubMed Central ID
  • text : 段落的全文
  • reference_ids : 该段落中的参考代码列表。

这些ID可以与parse_pubmed_references的输出合并。

  • section : 段落的部分(例如,背景、讨论、附录等)
dicts_out = pp.parse_pubmed_paragraph('data/6605965a.nxml', all_paragraph=False)

解析PubMed OA表格[在进行中]

你可以使用parse_pubmed_table从XML文件中解析表格。此函数将返回字典列表,每个字典具有以下键:

  • pmid : PubMed ID
  • pmc : PubMed Central ID
  • caption : 表格标题
  • label : 表格标签
  • table_columns : 列名称列表
  • table_values : 表格内部的值列表
  • table_xml : 表格的原始XML文本(如果return_xml=True则返回)
dicts_out = pp.parse_pubmed_table('data/medline16n0902.xml.gz', return_xml=False)

解析MEDLINE XML

MEDLINE XML与PubMed开放获取的XML格式不同。XML文件结构可在MEDLINE/PubMed DTD这里找到。你可以使用parse_medline_xml函数解析该格式。此函数将返回字典列表,每个元素包含:

  • pmid : PubMed ID
  • pmc : PubMed Central ID
  • doi : DOI
  • other_id : 找到的其他ID,每个用;分隔
  • title : 文章标题
  • abstract : 文章摘要
  • authors : 作者,每个用;分隔
  • mesh_terms : 包含相应MeSH ID的MeSH术语列表,每个用;分隔,例如'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) # 返回字典列表

要从PubDate中提取月份和日期信息,请设置year_info_only=True。我们还允许解析结构化摘要,可以通过更改nlm_category参数来控制每个部分或标签的显示。

解析MEDLINE资助ID

使用parse_grant_id解析XML文件中的MEDLINE资助ID。此函数将返回包含以下键的字典列表:

  • pmid : PubMed ID
  • grant_id : 资助ID
  • grant_acronym : 资助缩写
  • country : 资助来源的国家
  • agency : 资助机构

如果没有找到资助ID,它将返回None

从eutils网站解析MEDLINE XML

你可以使用PubMed解析器从E-Utilities解析XML文件,使用parse_xml_web 。对于此函数,你可以提供一个pmid作为输入,并得到一个包含以下键的字典:

  • title : 标题
  • abstract : 摘要
  • journal : 期刊
  • affiliation : 第一作者的附属机构
  • authors : 作者字符串,用;分隔
  • year : 出版年份
  • keywords : 文章的关键词或MESH术语
dict_out = pp.parse_xml_web(pmid, save_xml=False)

从网站解析MEDLINE XML引文

函数 parse_citation_web 允许您获取给定 PubMed ID 或 PubMed Central ID 的引文。这将返回一个包含以下键的字典:

  • pmc : PubMed Central ID
  • pmid : PubMed ID
  • doi : 文章的 DOI
  • n_citations : 给定文章的引用数量
  • pmc_cited : 引用给定 PMC 的 PMC 列表
dict_out = pp.parse_citation_web(doc_id, id_type='PMC')

从网站解析传出 XML 引文

函数 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 来测试您的安装。

解析 PubMed OA 数据集的示例代码

一个示例如下:

import pubmed_parser as pp
path_xml = pp.list_xml_path('data') # 列出目录下所有 xml 路径
pubmed_dict = pp.parse_pubmed_xml(path_xml[0]) # 字典输出
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 的示例用法

这是一个使用 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']] # 选择列
pubmed_oa_df_sel.write.parquet('pubmed_oa.parquet', mode='overwrite') # 写 DataFrame

更多信息请参见 scripts 文件夹。

核心成员

以及 contributors

依赖项

引用

如果您使用 Pubmed Parser,请从 JOSS 引用,如下所示:

Achakulvisut et al., (2020). Pubmed Parser: A Python Parser for PubMed Open-Access XML Subset and MEDLINE XML Dataset XML Dataset. Journal of Open Source Software, 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 issues 来讨论与存储库相关的问题。我们建议您在创建问题、报告错误或对存储库作出贡献之前,请阅读我们的 Contributing Guidelines

致谢

此包在宾夕法尼亚大学的 Konrad Kording's Lab 开发。我们感谢来自 JOSS 的审稿人和编辑,包括 tleonarditimClicks,和 majensen。他们使我们的存储库更加完善!

许可证

MIT License 版权所有 (c) 2015-2020 Titipat Achakulvisut, Daniel E. Acuna

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号