PubMed Parser es una biblioteca de Python para analizar el subconjunto PubMed Open-Access (OA), Repositorios XML de Medline y Utilidades de programación de Entrez (E-Utils). Utiliza la biblioteca lxml para analizar esta información en un diccionario de Python que puede usarse fácilmente para la investigación, como en la minería de texto y las tuberías de procesamiento del lenguaje natural.
Para las API y los detalles disponibles sobre el conjunto de datos, consulte nuestra página de wiki o página de documentación para obtener más detalles. A continuación, enumeramos algunas de las funciones básicas y ejemplos de código.
path proporcionada a una función puede ser la ruta a un archivo XML comprimido o sin comprimir. Proporcionamos archivos de ejemplo en la carpeta data . A continuación, enumeramos los analizadores disponibles de pubmed_parser .
Creamos un analizador simple para el subconjunto de acceso abierto PubMed donde puede dar una ruta o cadena XML a la función llamada parse_pubmed_xml que devolverá un diccionario con la siguiente información:
full_title : el título del artículoabstract : Resumenjournal : Nombre del diariopmid : ID de PubMedpmc : ID central de PubMeddoi : doi del artículopublisher_id : ID del editorauthor_list : Lista de autores con claves de afiliación en el siguiente formato [[ '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 : Lista de claves de afiliación y cadenas de afiliación en el siguiente formato [[ 'aff_key_1' , 'affiliation_1' ],
[ 'aff_key_2' , 'affiliation_2' ], ...]publication_year : año de publicaciónsubjects : Lista de sujetos enumerados en el artículo separado por Semicolon. A veces, solo contiene el tipo de artículo, como un artículo de investigación, procedimientos de revisión, etc. import pubmed_parser as pp
dict_out = pp . parse_pubmed_xml ( path ) La función parse_pubmed_references procesará un archivo XML de acceso abierto PubMed y devolverá una lista de los PMID que cita. Cada diccionario tiene claves de la siguiente manera
pmid : ID PubMed del artículopmc : PubMed Central ID del artículoarticle_title : Título del artículo citadojournal : Nombre del diariojournal_type : tipo de revistapmid_cited : ID PubMed del artículo que cita el artículodoi_cited : doi del artículo que cita el artículoyear : Año de publicación como aparece en la referencia (puede incluir el sufijo de letras, EG2007A) dicts_out = pp . parse_pubmed_references ( path ) # return list of dictionary La función parse_pubmed_caption puede analizar los subtítulos de imagen de una ruta dada a un archivo XML. Devolverá el índice de referencia que puede consultar a las imágenes reales. La función devolverá la lista de diccionario que tiene las siguientes claves
pmid : ID de PubMedpmc : ID central de PubMedfig_caption : cadena de subtítulosfig_id : ID de referencia para la figura (se use para referirse en el artículo XML)fig_label : etiqueta de la figuragraphic_ref : referencia al nombre del archivo de imagen proporcionado desde PubMed OA dicts_out = pp . parse_pubmed_caption ( path ) # return list of dictionary Para alguien que podría estar interesado en analizar el texto que rodea una cita, la biblioteca también proporciona esa funcionalidad. Puede usar parse_pubmed_paragraph para analizar el texto y las PMID de referencia. Esta función devolverá una lista de diccionarios, donde cada entrada tendrá las siguientes claves:
pmid : ID de PubMedpmc : ID central de PubMedtext : texto completo del párraforeference_ids : Lista de código de referencia dentro de ese párrafo. Este IDS puede fusionarse con la salida de parse_pubmed_references .
section : Sección del párrafo (por ejemplo, antecedentes, discusión, apéndice, etc.) dicts_out = pp . parse_pubmed_paragraph ( 'data/6605965a.nxml' , all_paragraph = False ) Puede usar parse_pubmed_table para analizar la tabla desde el archivo XML. Esta función devolverá la lista de diccionarios donde cada uno tiene las siguientes claves.
pmid : ID de PubMedpmc : ID central de PubMedcaption : subtítulos de la tablalabel : lable de la mesatable_columns : lista de nombre de columnatable_values : lista de valores dentro de la tablatable_xml : texto XML sin procesar de la tabla (return si return_xml=True ) dicts_out = pp . parse_pubmed_table ( 'data/medline16n0902.xml.gz' , return_xml = False ) Medline XML tiene un formato XML diferente al acceso abierto de PubMed. La estructura de los archivos XML se puede encontrar en Medline/PubMed DTD aquí. Puede usar la función parse_medline_xml para analizar ese formato. Esta función devolverá la lista de diccionarios, donde cada elemento contiene:
pmid : ID de PubMedpmc : ID central de PubMeddoi : doiother_id : Otras ID encontradas, cada una separada por ;title : Título del artículoabstract : Resumen del artículoauthors : autores, cada uno separado por ;mesh_terms : lista de términos de malla con ID de malla correspondiente, cada una separada por ; Por ejemplo 'D000161:Acoustic Stimulation; D000328:Adult; ...publication_types : Lista de tipos de publicación Lista cada una separada por ; por ejemplo, 'D016428:Journal Article'keywords : lista de palabras clave, cada una separada por ;chemical_list : lista de términos químicos, cada uno separado por ;pubdate : fecha de publicación. El valor predeterminado solo a la información del año.journal : Revista del artículo dadomedline_ta : Esta es la abreviatura del nombre del diarionlm_unique_id : identificación única de NLMissn_linking : enlace ISSN, generalmente se usa para vincular con el conjunto de datos de la Web of Sciencecountry : País extraído del campo de información de la revistareference : cadena de PMID cada uno separado por ; o lista de referencias hechas al artículodelete : boolean si False significa papel se actualizó para que tenga doslanguages : lista de idiomas, separados por ;vernacular_title : título vernáculo. El valor predeterminado se vacía cuando no esté disponible.XMLS para el mismo papel. Puede eliminar el registro de papel eliminado porque se actualizó.
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 Para extraer información de mes y día de Pubdate, establezca year_info_only=True . También permitimos el análisis estructurado de análisis y podemos controlar la visualización de cada sección o etiqueta cambiando el argumento nlm_category .
Use parse_grant_id para analizar ID de subvención MEDLINE desde el archivo XML. Esto devolverá una lista de diccionarios, cada uno que contiene
pmid : ID de PubMedgrant_id : ID de Grantgrant_acronym : acrónimo de Grantcountry : país donde otorga fondos deagency : Agencia de subvención Si no se encuentra una identificación de subvención, no devolverá None
Puede usar PubMed Parser para analizar el archivo XML de E-Utilidades utilizando parse_xml_web . Para esta función, puede proporcionar un solo pmid como entrada y obtener un diccionario con las siguientes claves
title : Títuloabstract : Resumenjournal : diarioaffiliation : Afiliación del primer autorauthors : cadena de autores, separados por ;year : año de publicaciónkeywords : palabras clave o términos de malla del artículo dict_out = pp . parse_xml_web ( pmid , save_xml = False ) La función parse_citation_web le permite obtener las citas a una identificación de PubMed dada o ID central de PubMed. Esto devolverá un diccionario que contiene las siguientes claves
pmc : ID central de PubMedpmid : ID de PubMeddoi : doi del artículon_citations : Número de citas para artículos dadospmc_cited : Lista de PMC que citan el PMC dado dict_out = pp . parse_citation_web ( doc_id , id_type = 'PMC' ) La función parse_outgoing_citation_web le permite obtener los artículos que cita un artículo dado, dada una ID PubMed o ID Central de PubMed. Esto devolverá un diccionario que contiene las siguientes claves
n_citations : Número de artículos citadosdoc_id : el identificador de documento dadoid_type : el tipo de identificador dado. Ya sea 'PMID' o 'PMC'pmid_cited : Lista de PMID citadas por el artículo dict_out = pp . parse_outgoing_citation_web ( doc_id , id_type = 'PMID' ) Los identificadores deben pasar como cuerdas. Las ID de PubMed Central son predeterminadas y deben aprobarse como cadenas sin el prefijo 'PMC' . Si no se encuentran citas, o si no se encuentra ningún artículo que coincida con doc_id en la base de datos indicada, no devolverá None .
Puede instalar la versión más actualizada del paquete directamente desde el repositorio
pip install git+https://github.com/titipata/pubmed_parser.gito instale la versión reciente con Pypi usando
pip install pubmed-parser o clonar el repositorio e instalar usando pip
git clone https://github.com/titipata/pubmed_parser
pip install ./pubmed_parser Puede probar su instalación ejecutando pytest --cov=pubmed_parser tests/ --verbose en la raíz del repositorio.
Un uso de ejemplo se muestra de la siguiente manera
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' }Este es un fragmento para analizar todo el subconjunto de acceso abierto PubMed usando 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 dataframeConsulte la carpeta de scripts para obtener más información.
y contribuyentes
Si usa PubMed Parser, cíquelo desde Joss de la siguiente manera
Achakulvisut et al., (2020). PubMed Parser: un analizador Python para el subconjunto XML de acceso abierto PubMed y el conjunto de datos XML de datos XML MEDLINE. Journal of Open Source Software, 5 (46), 1979, https://doi.org/10.21105/Joss.01979
o usar 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}
}
Agradecemos las contribuciones de cualquiera que desee mejorar el analizador PubMed. Puede crear problemas de GitHub para discutir preguntas o problemas relacionados con el repositorio. Le sugerimos que lea nuestras pautas contribuyentes antes de crear problemas, informar errores o hacer una contribución al repositorio.
Este paquete se desarrolla en el laboratorio de Konrad Kording en la Universidad de Pensilvania. Nos gustaría agradecer a los revisores y al editor de Joss, incluidos tleonardi , timClicks y majensen . ¡Hicieron nuestro repositorio mucho mejor!
Copyright de licencia MIT (c) 2015-2020 Titipat Achakulvisut, Daniel E. Acuna