PubMed Parserは、PubMed Open-Access(OA)Subset、Medline XMLリポジトリ、Entrezプログラミングユーティリティ(E-UTILS)を解析するためのPythonライブラリです。 lxmlライブラリを使用して、この情報をPython Dictionaryに解析します。PythonDictionaryは、テキストマイニングや自然言語処理パイプラインなど、研究に簡単に使用できます。
利用可能なAPIおよびデータセットの詳細については、詳細についてはWikiページまたはドキュメントページを参照してください。以下に、コアファンティオン性とコードの例のいくつかをリストします。
path 、圧縮または非圧縮されていないXMLファイルへのパスです。 dataフォルダーにサンプルファイルを提供します。以下に、 pubmed_parserから利用可能なパーサーをリストします。
PubMed Open Access Subset用のシンプルなパーサーを作成しました。ここでは、 parse_pubmed_xmlと呼ばれる関数にXMLパスまたは文字列を与えることができます。
full_title :記事のタイトルabstract :要約journal :ジャーナル名pmid :PubMed IDpmc :PubMed Central IDdoi :記事のdoipublisher_id :Publisher 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 IDが引用していますdoi_cited :その記事のdoiは、その記事を引用していますyear :リファレンスに表示される出版年(文字の接尾辞、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 :PubMedOAから提供された画像ファイル名への参照 dicts_out = pp . parse_pubmed_caption ( path ) # return list of dictionary引用を取り巻くテキストを解析することに興味がある人のために、ライブラリはその機能も提供します。 parse_pubmed_paragraphを使用して、テキストと参照PMIDを解析できます。この関数は、辞書のリストを返します。各エントリには次のキーがあります。
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 :テーブルの生のXMLテキスト( return_xml=Trueの場合はreturn) dicts_out = pp . parse_pubmed_table ( 'data/medline16n0902.xml.gz' , return_xml = False ) Medline XMLには、PubMedオープンアクセスとは異なるXML形式があります。 XMLファイルの構造は、ここでMedline/PubMed DTDにあります。関数parse_medline_xmlを使用して、その形式を解析できます。この関数は、各要素が含まれる辞書のリストを返します。
pmid :PubMed IDpmc :PubMed Central IDdoi :doiother_id :それぞれが分離された他のIDが見つかりました;title :記事のタイトルabstract :記事の要約authors :著者、それぞれが分離されています;mesh_terms :それぞれが分離された対応するメッシュIDを使用したメッシュ用語のリスト;例: 'D000161:Acoustic Stimulation; D000328:Adult; ...publication_types :それぞれ分離された出版タイプリストのリスト; EG 'D016428:Journal Article'keywords :キーワードのリスト、それぞれが分離されています;chemical_list :それぞれが分離された化学用語のリスト;pubdate :発行日。デフォルトは年の情報のみです。journal :与えられた論文のジャーナルmedline_ta :これはジャーナル名の略語ですnlm_unique_id :NLM一意の識別issn_linking :ISSNリンケージ、通常、Web of Science Datasetとのリンクに使用するcountry :ジャーナル情報フィールドから抽出された国reference :それぞれ分離されたPMIDの文字列;または記事に作成された参照のリストdelete : Falseが紙が更新された場合、ブール値が2つある場合がある場合languages :言語のリスト;vernacular_title :vernacularタイトル。デフォルトは、利用できない場合は空の文字列になります。同じ論文の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引数を変更することにより、各セクションまたはラベルの表示を制御できます。
XMLファイルからMedline Grant IDを解析するために、 parse_grant_idを使用します。これにより、それぞれが含まれる辞書のリストが返されます
pmid :PubMed IDgrant_id :grant idgrant_acronym :Grantの頭字語country :補助金の資金提供国agency :助成金付与IDが見つからない場合、それは返されませNone
PubMed Parserを使用して、 parse_xml_webを使用してe-utilitiesから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リポジトリのルートで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オープンアクセスサブセットを解析するためのスニペットです
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パーサーを使用する場合は、次のようにJossから引用してください
Achakulvisut et al。、(2020)。 PubMed Parser:PubMed Open-Access XML SubsetおよびMedline XML Dataset XML DatasetのPythonパーサー。 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パーサーを改善したい人からの貢献を歓迎します。 GitHubの問題を作成して、リポジトリに関連する質問や問題について議論できます。問題を作成したり、バグを報告したり、リポジトリに貢献したりする前に、貢献ガイドラインを読むことをお勧めします。
このパッケージは、ペンシルベニア大学のコンラッド・コーディングの研究室で開発されています。 tleonardi 、 timClicks 、 majensenなど、Jossのレビュアーと編集者に感謝します。彼らは私たちのリポジトリをより良くしました!
MITライセンスCopyright(c)2015-2020 Titipat Achakulvisut、Daniel E. Acuna