PubMed Parser est une bibliothèque Python pour analyser le sous-ensemble PubMed Open-Access (OA), les référentiels MEDLINE XML et les utilitaires de programmation Entrez (E-UTIL). Il utilise la bibliothèque lxml pour analyser ces informations dans un dictionnaire Python qui peut être facilement utilisé pour la recherche, comme dans l'exploration de texte et les pipelines de traitement du langage naturel.
Pour les API et détails disponibles sur l'ensemble de données, veuillez consulter notre page Wiki ou notre page de documentation pour plus de détails. Ci-dessous, nous énumérons certaines des fonctionnalités de base et des exemples de code.
path fourni à une fonction peut être le chemin d'accès à un fichier XML compressé ou non compressé. Nous fournissons des exemples de fichiers dans le dossier data . Ci-dessous, nous énumérons les analyseurs disponibles de pubmed_parser .
Nous avons créé un analyseur simple pour le sous-ensemble PubMed Open Access où vous pouvez donner un chemin ou une chaîne XML à la fonction appelée parse_pubmed_xml qui renverra un dictionnaire avec les informations suivantes:
full_title : titre de l'articleabstract : Résuméjournal : Nom du journalpmid : ID PubMedpmc : ID Central PubMeddoi : doi de l'articlepublisher_id : ID de l'éditeurauthor_list : Liste des auteurs avec des clés d'affiliation dans le format suivant [[ '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 : liste des clés d'affiliation et des chaînes d'affiliation dans le format suivant [[ 'aff_key_1' , 'affiliation_1' ],
[ 'aff_key_2' , 'affiliation_2' ], ...]publication_year : année de publicationsubjects : Liste des sujets répertoriés dans l'article séparé par le demi-colon. Parfois, il ne contient que le type de l'article, tel qu'un article de recherche, des procédures d'examen, etc. import pubmed_parser as pp
dict_out = pp . parse_pubmed_xml ( path ) La fonction parse_pubmed_references traitera un fichier XML Open Access PubMed et renverra une liste des PMID qu'il cite. Chaque dictionnaire a des clés comme suit
pmid : ID PubMed de l'articlepmc : ID Central PubMed de l'articlearticle_title : titre de l'article citéjournal : Nom du journaljournal_type : type de journalpmid_cited : PubMed ID de l'article que l'article citedoi_cited : doi de l'article que l'article citeyear : Année de publication telle qu'elle apparaît dans la référence (peut inclure le suffixe de lettres, EG2007A) dicts_out = pp . parse_pubmed_references ( path ) # return list of dictionary La fonction parse_pubmed_caption peut analyser les légendes d'image d'un chemin donné vers XML. Il renverra l'index de référence que vous pouvez vous référer à des images réelles. La fonction renverra la liste du dictionnaire qui a des clés suivantes
pmid : ID PubMedpmc : ID Central PubMedfig_caption : chaîne de légendefig_id : ID de référence pour la figure (Utiliser pour vous référer dans l'article XML)fig_label : étiquette de la figuregraphic_ref : Référence au nom de fichier image fourni à partir de PubMed OA dicts_out = pp . parse_pubmed_caption ( path ) # return list of dictionary Pour quelqu'un qui pourrait être intéressé par l'analyse du texte entourant une citation, la bibliothèque fournit également cette fonctionnalité. Vous pouvez utiliser parse_pubmed_paragraph pour analyser le texte et la référence PMIDS. Cette fonction renverra une liste de dictionnaires, où chaque entrée aura des clés suivantes:
pmid : ID PubMedpmc : ID Central PubMedtext : texte intégral du paragraphereference_ids : Liste du code de référence dans ce paragraphe. Ces ID peuvent fusionner avec la sortie de parse_pubmed_references .
section : Section du paragraphe (par exemple, discussion, discussion, annexe, etc.) dicts_out = pp . parse_pubmed_paragraph ( 'data/6605965a.nxml' , all_paragraph = False ) Vous pouvez utiliser parse_pubmed_table pour analyser la table du fichier XML. Cette fonction renverra la liste des dictionnaires où chacun a des clés suivantes.
pmid : ID PubMedpmc : ID Central PubMedcaption : Légende du tableaulabel : lable de la tabletable_columns : Liste du nom de la colonnetable_values : liste des valeurs à l'intérieur du tableautable_xml : Texte XML brut de la table (retournez si return_xml=True ) dicts_out = pp . parse_pubmed_table ( 'data/medline16n0902.xml.gz' , return_xml = False ) MEDLINE XML a un format XML différent de l'accès ouvert PubMed. La structure des fichiers XML se trouve ici dans MEDLINE / PubMed DTD. Vous pouvez utiliser la fonction parse_medline_xml pour analyser ce format. Cette fonction renverra la liste des dictionnaires, où chaque élément contient:
pmid : ID PubMedpmc : ID Central PubMeddoi : doiother_id : autres ID trouvés, chacun séparé par ;title : Titre de l'articleabstract : Résumé de l'articleauthors : Auteurs, chacun séparé par ;mesh_terms : Liste des termes de maillage avec ID de maillage correspondant, chacun séparé par ; par exemple 'D000161:Acoustic Stimulation; D000328:Adult; ...publication_types : liste de types de publication Liste chacune séparée par ; Par exemple 'D016428:Journal Article'keywords : liste des mots clés, chacun séparé par ;chemical_list : Liste des termes chimiques, chacun séparé par ;pubdate : Date de publication. Par défaut, les informations de l'année uniquement.journal : Journal du document donnémedline_ta : c'est l'abréviation du nom du journalnlm_unique_id : NLM Identification uniqueissn_linking : lien ISSN, utilisez généralement pour créer un lien avec le jeu de données Web of Sciencecountry : pays extrait du champ d'information du journalreference : chaîne de pMID chacune séparée par ; ou la liste des références faites à l'articledelete : booléen si False signifie que le papier a été mis à jour, vous pourriez en avoir deuxlanguages : Liste des langues, séparées par ;vernacular_title : titre vernaculaire. Par défaut est une chaîne vide chaque fois que non disponible.XMLS pour le même papier. Vous pouvez supprimer l'enregistrement du papier supprimé car il a été mis à jour.
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 Pour extraire les informations de mois et de jour de Pubdate, définissez year_info_only=True . Nous permettons également d'analyser un résumé structuré et nous pouvons contrôler l'affichage de chaque section ou étiquette en modifiant l'argument nlm_category .
Utilisez parse_grant_id afin d'analyser les ID de subvention MEDLINE du fichier XML. Cela rendra une liste de dictionnaires, chacun contenant
pmid : ID PubMedgrant_id : ID de subventiongrant_acronym : Acronyme de Grantcountry : Pays où accorder le financement deagency : Agence de subvention Si aucun identifiant de subvention n'est trouvé, il n'en retournera None
Vous pouvez utiliser PubMed Parser pour analyser le fichier XML à partir des e-Utilities en utilisant parse_xml_web . Pour cette fonction, vous pouvez fournir un seul pmid en entrée et obtenir un dictionnaire avec des clés suivantes
title : titreabstract : Résuméjournal : journalaffiliation : affiliation du premier auteurauthors : chaîne d'auteurs, séparés par ;year : Année de publicationkeywords : mots clés ou termes en maillage de l'article dict_out = pp . parse_xml_web ( pmid , save_xml = False ) La fonction parse_citation_web vous permet d'obtenir les citations à un ID PubMed donné ou à PubMed Central ID. Cela rendra un dictionnaire qui contient les clés suivantes
pmc : ID Central PubMedpmid : ID PubMeddoi : doi de l'articlen_citations : nombre de citations pour les articles donnéspmc_cited : Liste des PMC qui citent le PMC donné dict_out = pp . parse_citation_web ( doc_id , id_type = 'PMC' ) La fonction parse_outgoing_citation_web vous permet d'obtenir les articles qu'un article donné cite, étant donné un ID PubMed ou PubMed Central ID. Cela rendra un dictionnaire qui contient les clés suivantes
n_citations : nombre d'articles citésdoc_id : l'identifiant de document donnéid_type : Le type d'identifiant donné. Soit 'PMID' ou 'PMC'pmid_cited : Liste des pMID cités par l'article dict_out = pp . parse_outgoing_citation_web ( doc_id , id_type = 'PMID' ) Les identifiants doivent être passés comme des cordes. Les ID PubMed Central sont par défaut et doivent être passés sous forme de chaînes sans le préfixe 'PMC' . Si aucune citation n'est trouvée, ou si aucun article n'est trouvé correspondant à doc_id dans la base de données indiquée, il n'en renverra None .
Vous pouvez installer la version la plus mise à jour du package directement à partir du référentiel
pip install git+https://github.com/titipata/pubmed_parser.gitou installer une version récente avec PYPI en utilisant
pip install pubmed-parser ou cloner le référentiel et installer à l'aide de pip
git clone https://github.com/titipata/pubmed_parser
pip install ./pubmed_parser Vous pouvez tester votre installation en exécutant pytest --cov=pubmed_parser tests/ --verbose dans la racine du référentiel.
Un exemple d'utilisation est montré comme suit
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' }Ceci est un extrait pour analyser tous les sous-ensembles PubMed Open Access à l'aide de 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 dataframeVoir le dossier Scripts pour plus d'informations.
et contributeurs
Si vous utilisez PubMed Parser, veuillez le citer de Joss comme suit
Achakulvisut et al., (2020). PubMed Parser: un analyseur Python pour le sous-ensemble XML à accès ouvert PubMe et l'ensemble de données XML MEDLINE XML. Journal of Open Source Software, 5 (46), 1979, https://doi.org/10.21105/joss.01979
ou en utilisant 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}
}
Nous accueillons les contributions de tous ceux qui souhaitent améliorer PubMed Parser. Vous pouvez créer des problèmes GitHub pour discuter des questions ou des problèmes relatifs au référentiel. Nous vous suggérons de lire nos directives contributives avant de créer des problèmes, de signaler des bogues ou de contribuer au référentiel.
Ce package est développé dans le laboratoire de Konrad Kording à l'Université de Pennsylvanie. Nous tenons à remercier les critiques et l'éditeur de Joss, y compris tleonardi , timClicks et majensen . Ils ont rendu notre référentiel beaucoup meilleur!
Licence du MIT Copyright (C) 2015-2020 Titipat Achakulvisut, Daniel E. Acuna