PubMed Parser เป็นไลบรารี Python สำหรับการแยกวิเคราะห์ชุดย่อย PubMed Open-Access (OA), ที่เก็บ Medline XML และ Entrez Programming Utilities (E-utils) มันใช้ไลบรารี lxml เพื่อแยกวิเคราะห์ข้อมูลนี้เป็นพจนานุกรม Python ซึ่งสามารถใช้งานได้ง่ายสำหรับการวิจัยเช่นในการทำเหมืองข้อความและท่อประมวลผลภาษาธรรมชาติ
สำหรับ API ที่มีอยู่และรายละเอียดเกี่ยวกับชุดข้อมูลโปรดดูหน้า Wiki หรือหน้าเอกสารสำหรับรายละเอียดเพิ่มเติม ด้านล่างเราแสดงรายการ Funtionalities หลักและตัวอย่างรหัส
path ที่ให้กับฟังก์ชั่นสามารถเป็นเส้นทางไปยังไฟล์ XML ที่บีบอัดหรือไม่บีบอัด เราให้ตัวอย่างไฟล์ในโฟลเดอร์ data ด้านล่างเราแสดงรายการตัวแยกวิเคราะห์ที่มีอยู่จาก pubmed_parser
เราสร้างตัวแยกวิเคราะห์อย่างง่ายสำหรับชุดย่อย PubMed Open Access ซึ่งคุณสามารถให้เส้นทาง XML หรือสตริงกับฟังก์ชั่นที่เรียกว่า parse_pubmed_xml ซึ่งจะส่งคืนพจนานุกรมด้วยข้อมูลต่อไปนี้:
full_title : ชื่อของบทความabstract : บทคัดย่อjournal : วารสารชื่อpmid : ID PubMedpmc : PubMed Central IDdoi : ดอยของบทความpublisher_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 และส่งคืนรายการ PMIDS ที่อ้างอิง แต่ละพจนานุกรมมีคีย์ดังนี้
pmid : ID PubMed ของบทความpmc : PubMed Central ID ของบทความarticle_title : ชื่อเรื่องของบทความที่อ้างถึงjournal : วารสารชื่อjournal_type : ประเภทของวารสารpmid_cited : ID PubMed ของบทความที่บทความอ้างอิงdoi_cited : doi ของบทความที่บทความอ้างอิงyear : ปีที่สิ่งพิมพ์ตามที่ปรากฏในการอ้างอิง (อาจรวมถึงคำต่อท้ายจดหมาย, EG2007A) dicts_out = pp . parse_pubmed_references ( path ) # return list of dictionary ฟังก์ชั่น parse_pubmed_caption สามารถแยกวิเคราะห์คำอธิบายภาพจากเส้นทางที่กำหนดไปยังไฟล์ XML มันจะส่งคืนดัชนีอ้างอิงที่คุณสามารถอ้างอิงกลับไปที่ภาพจริง ฟังก์ชั่นจะส่งคืนรายการพจนานุกรมซึ่งมีคีย์ดังต่อไปนี้
pmid : ID PubMedpmc : 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 : ID PubMedpmc : 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 : ID PubMedpmc : PubMed Central IDcaption : คำบรรยายภาพของตารางlabel : lable ของตารางtable_columns : รายการชื่อคอลัมน์table_values : รายการค่าภายในตารางtable_xml : ข้อความ XML ดิบของตาราง (return ถ้า 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 : ID PubMedpmc : PubMed Central IDdoi : ดอยother_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 INTEDIFICATIONissn_linking : การเชื่อมโยง ISSN โดยทั่วไปใช้เพื่อเชื่อมโยงกับชุดข้อมูล 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 ให้ตั้งค่า year_info_only=True นอกจากนี้เรายังอนุญาตให้มีการแยกวิเคราะห์บทคัดย่อที่มีโครงสร้างและเราสามารถควบคุมการแสดงผลของแต่ละส่วนหรือฉลากโดยการเปลี่ยนอาร์กิวเมนต์ nlm_category
ใช้ parse_grant_id เพื่อแยกวิเคราะห์ Medline Grant ID จากไฟล์ XML สิ่งนี้จะส่งคืนรายการพจนานุกรมแต่ละรายการที่มี
pmid : ID PubMedgrant_id : Grant IDgrant_acronym : ตัวย่อของ Grantcountry : ประเทศที่ให้เงินทุนจากagency : หน่วยงาน Grant หากไม่พบ ID Grant มันจะ None กลับมา
คุณสามารถใช้ PubMed Parser เพื่อแยกวิเคราะห์ไฟล์ XML จาก e-utilities โดยใช้ 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 ID ที่กำหนดหรือ PubMed Central ID สิ่งนี้จะส่งคืนพจนานุกรมซึ่งมีคีย์ต่อไปนี้
pmc : PubMed Central IDpmid : ID PubMeddoi : ดอยของบทความn_citations : จำนวนการอ้างอิงสำหรับบทความที่กำหนดpmc_cited : รายการ PMC ที่อ้างถึง PMC ที่กำหนด dict_out = pp . parse_citation_web ( doc_id , id_type = 'PMC' ) ฟังก์ชั่น parse_outgoing_citation_web ช่วยให้คุณได้รับบทความที่บทความที่กำหนดอ้างถึง ID 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 ทั้งหมดโดยใช้ 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: Python Parser สำหรับ PubMed ชุดย่อย XML แบบเปิดการเข้าถึงและชุดข้อมูล XML XML MEDLINE XML วารสารซอฟต์แวร์โอเพนซอร์ส, 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 ที่ University of Pennsylvania เราขอขอบคุณผู้ตรวจสอบและบรรณาธิการจาก Joss รวมถึง tleonardi , timClicks และ majensen พวกเขาทำให้พื้นที่เก็บข้อมูลของเราดีขึ้นมาก!
ลิขสิทธิ์ใบอนุญาต MIT (C) 2015-2020 Titipat Achakulvisut, Daniel E. Acuna