PubMed Parser هي مكتبة Python لتحليل مجموعة PubMed Open-Access (OA) ، ومستودعات Medline XML ، ومرافق برمجة Entrez (ETILS). يستخدم مكتبة lxml لتحليل هذه المعلومات في قاموس Python الذي يمكن استخدامه بسهولة للبحث ، كما هو الحال في تعدين النصوص ومعالجة اللغة الطبيعية.
لتواجهات واجهات برمجة التطبيقات المتوفرة والتفاصيل حول مجموعة البيانات ، يرجى الاطلاع على صفحة Wiki أو صفحة الوثائق لمزيد من التفاصيل. أدناه ، ندرج بعض الأمثلة الأساسية وأمثلة رمز.
path المقدم لوظيفة هو المسار إلى ملف XML مضغوط أو غير مضغوط. نحن نقدم مثال ملفات في مجلد data . أدناه ، ندرج محلات المتاحة من pubmed_parser .
لقد أنشأنا محللًا بسيطًا لمجموعة PubMed Open Access الفرعية حيث يمكنك إعطاء مسار أو سلسلة XML إلى الوظيفة التي تسمى parse_pubmed_xml والتي ستعيد قاموسًا بالمعلومات التالية:
full_title : عنوان المقالةabstract : الملخصjournal : اسم المجلةpmid : معرف PubMedpmc : PubMed Central IDdoi : دوي من المقالpublisher_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 : قائمة الموضوعات المدرجة في المقالة مفصولة Semicolon. في بعض الأحيان ، لا يحتوي إلا على نوع المقالة ، مثل مقالة بحثية ، وإجراءات مراجعة ، إلخ. import pubmed_parser as pp
dict_out = pp . parse_pubmed_xml ( path ) ستعمل الدالة parse_pubmed_references معالجة ملف PubMed Open Access XML وإرجاع قائمة من PMIDs التي يستشهد بها. كل قاموس لديه مفاتيح على النحو التالي
pmid : معرف PubMed من المقالةpmc : معرف PubMed المركزي للمقالةarticle_title : عنوان المقالة المذكورةjournal : اسم المجلةjournal_type : نوع المجلةpmid_cited : معرف PubMed من المقالة التي تستشهد بها المقالةdoi_cited : doi من المقالة التي يستشهد بها المقالةyear : سنة النشر كما يظهر في المرجع (قد تشمل لاحقة الرسالة ، EG2007A) dicts_out = pp . parse_pubmed_references ( path ) # return list of dictionary يمكن للدالة parse_pubmed_caption تحليل التسميات التوضيحية للصورة من مسار معين إلى ملف XML. سيعود فهرس المرجع الذي يمكنك الرجوع إليه إلى الصور الفعلية. ستعود الوظيفة إلى قائمة القاموس التي لديها مفاتيح التالية
pmid : معرف PubMedpmc : PubMed Central IDfig_caption : سلسلة التسمية التوضيحيةfig_id : معرف مرجع للشكل (استخدم للإشارة في مقالة XML)fig_label : تسمية الشكلgraphic_ref : مرجع إلى اسم ملف الصورة المقدم من PubMed OA dicts_out = pp . parse_pubmed_caption ( path ) # return list of dictionary بالنسبة للشخص الذي قد يكون مهتمًا بتحليل النص المحيط بالاستشهاد ، توفر المكتبة أيضًا هذه الوظيفة. يمكنك استخدام parse_pubmed_paragraph لتحليل النص والمرجع PMIDs. ستعيد هذه الوظيفة قائمة القواميس ، حيث سيكون لكل إدخال مفاتيح التالية:
pmid : معرف PubMedpmc : PubMed Central IDtext : النص الكامل للفقرةreference_ids : قائمة الكود المرجعي داخل تلك الفقرة. يمكن أن تندمج هذه المعرفات مع الإخراج من parse_pubmed_references .
section : قسم الفقرة (على سبيل المثال الخلفية ، المناقشة ، التذييل ، إلخ) dicts_out = pp . parse_pubmed_paragraph ( 'data/6605965a.nxml' , all_paragraph = False ) يمكنك استخدام parse_pubmed_table to parse table من ملف xml. ستعود هذه الوظيفة إلى قائمة القواميس حيث يكون لكل منها مفاتيح التالية.
pmid : معرف PubMedpmc : PubMed Central IDcaption : تعليق على الجدولlabel : lable من الجدول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 على تنسيق XML مختلف عن Access Open PubMed. يمكن العثور على بنية ملفات XML في Medline/PubMed DTD هنا. يمكنك استخدام الدالة parse_medline_xml لتحليل هذا التنسيق. ستعود هذه الوظيفة إلى قائمة القواميس ، حيث يحتوي كل عنصر على:
pmid : معرف PubMedpmc : PubMed Central IDdoi : doiother_id : تم العثور على معرفات أخرى ، كل مفصولة ;title : عنوان المقالabstract : ملخص المقالةauthors : مؤلفون ، كل واحد مفصولة ;mesh_terms : قائمة المصطلحات الشبكية مع معرف الشبكة المقابلة ، كل مفصولة بواسطة ; مثل 'D000161:Acoustic Stimulation; D000328:Adult; ...publication_types : قائمة قائمة نوع النشر كل مفصولة بواسطة ; على سبيل المثال 'D016428:Journal Article'keywords : قائمة الكلمات الرئيسية ، كل مفصولة بواسطة ;chemical_list : قائمة المصطلحات الكيميائية ، كل مفصولة ;pubdate : تاريخ النشر. الإعدادات الافتراضية لمعلومات السنة فقط.journal : مجلة الورقة المحددةmedline_ta : هذا اختصار لاسم المجلةnlm_unique_id : تحديد هوية فريدة NLMissn_linking : ISSN Linkage ، عادةً ما يستخدم للربط مع مجموعة بيانات Web of Sciencecountry : بلد مستخرج من مجال معلومات اليوميةreference : سلسلة من PMID كل مفصولة بواسطة ; أو قائمة المراجع المقدمة إلى المقالةdelete : Boolean إذا تم تحديث الورق False إذا كان لديك اثنينlanguages : قائمة اللغات ، مفصولة ;vernacular_title : العنوان العام. الافتراضيات لسلسلة فارغة كلما كان غير متوفر.XMLs لنفس الورقة. يمكنك حذف سجل الورق المحذوف لأنه تم تحديثه.
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 ، set year_info_only=True . نسمح أيضًا بتحليل الملخص المهيكل ويمكننا التحكم في عرض كل قسم أو تسمية عن طريق تغيير وسيطة nlm_category .
استخدم parse_grant_id من أجل تحليل معرفات منح medline من ملف XML. سيؤدي هذا إلى إرجاع قائمة القواميس ، كل منها يحتوي
pmid : معرف PubMedgrant_id : معرف المنحةgrant_acronym : اختصار Grantcountry : البلد الذي منح التمويل منagency : وكالة المنح إذا لم يتم العثور على معرف منحة ، فلن يعيد None
يمكنك استخدام PubMed Parser لتحليل ملف XML من الاستخدامات الإلكترونية باستخدام parse_xml_web . لهذه الوظيفة ، يمكنك توفير pmid واحدة كمدخل والحصول على قاموس مع مفاتيح التالية
title : العنوانabstract : الملخصjournal : مجلةaffiliation : انتماء المؤلف الأولauthors : سلسلة من المؤلفين ، مفصولة ;year : سنة النشرkeywords : الكلمات الرئيسية أو شروط الشبكة للمقالة dict_out = pp . parse_xml_web ( pmid , save_xml = False ) تتيح لك الدالة parse_citation_web الحصول على الاستشهادات إلى معرف PubMed معين أو معرف PubMed المركزي. سيؤدي هذا إلى إرجاع القاموس الذي يحتوي على المفاتيح التالية
pmc : PubMed Central IDpmid : معرف PubMeddoi : دوي من المقالn_citations : عدد الاستشهادات للمقالات المعطاةpmc_cited : قائمة PMCs التي تستشهد بـ PMC المعطى dict_out = pp . parse_citation_web ( doc_id , id_type = 'PMC' ) تتيح لك الدالة parse_outgoing_citation_web الحصول على مقالات مقالة معينة تستشهد بها معرف PubMed أو PubMed Central ID. سيؤدي هذا إلى إرجاع القاموس الذي يحتوي على المفاتيح التالية
n_citations : عدد المقالات المذكورةdoc_id : معرف المستند المعطىid_type : نوع المعرف المعطى. إما 'PMID' أو 'PMC'pmid_cited : قائمة PMIDs التي استشهدت بها المقالة 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' }هذا هو مقتطف لتحليل جميع مجموعة PubMed Open Access Subster باستخدام 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 dataframeانظر مجلد البرامج النصية لمزيد من المعلومات.
والمساهمين
إذا كنت تستخدم PubMed Parser ، فيرجى الاستشهاد بها من Joss على النحو التالي
Achakulvisut et al. ، (2020). PubMed Parser: A Python Parser لمجموعة بيانات PubMed Open-Access XML و Medline XML Dataset XML. 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 لمناقشة الأسئلة أو القضايا المتعلقة بالمستودع. نقترح عليك قراءة إرشاداتنا المساهمة قبل إنشاء المشكلات أو الإبلاغ عن الأخطاء أو تقديم مساهمة في المستودع.
تم تطوير هذه الحزمة في مختبر Konrad Kording في جامعة بنسلفانيا. نود أن نشكر المراجعين ومحرر جوس بما في ذلك tleonardi و timClicks و majensen . جعلوا مستودعنا أفضل بكثير!
COPYRIGHT ترخيص MIT (C) 2015-2020 TITIPAT ACHAKULVISUT ، دانييل إي.