O PubMed Parser é uma biblioteca Python para analisar o subconjunto de acesso aberto (OA) do PubMed, repositórios MEDLINE XML e Utilitários de Programação de Entrez (E-UTILS). Ele usa a biblioteca lxml para analisar essas informações em um dicionário Python, que pode ser facilmente usado para pesquisa, como na mineração de texto e nos pipelines de processamento de linguagem natural.
Para obter APIs e detalhes disponíveis sobre o conjunto de dados, consulte nossa página do wiki ou página de documentação para obter mais detalhes. Abaixo, listamos algumas das funções principais e exemplos de código.
path fornecido para uma função pode ser o caminho para um arquivo XML compactado ou não compactado. Fornecemos arquivos de exemplo na pasta data . Abaixo, listamos os analisadores disponíveis no pubmed_parser .
Criamos um analisador simples para o subconjunto de acesso aberto do PubMed, onde você pode fornecer um caminho ou string xml para a função chamada parse_pubmed_xml , que retornará um dicionário com as seguintes informações:
full_title : título do artigoabstract : Resumojournal : Nome do Jornalpmid : PubMed IDpmc : PubMed Central IDdoi : doi do artigopublisher_id : ID do editorauthor_list : Lista de autores com chaves de afiliação no seguinte 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 chaves de afiliação e seqüências de afiliação no seguinte formato [[ 'aff_key_1' , 'affiliation_1' ],
[ 'aff_key_2' , 'affiliation_2' ], ...]publication_year : ano de publicaçãosubjects : Lista de assuntos listados no artigo separado por Semicolon. Às vezes, ele contém apenas o tipo de artigo, como um artigo de pesquisa, procedimentos de revisão etc. import pubmed_parser as pp
dict_out = pp . parse_pubmed_xml ( path ) A função parse_pubmed_references processará um arquivo XML de acesso aberto do PubMed e retornará uma lista dos PMIDs que cita. Cada dicionário tem chaves da seguinte maneira
pmid : PubMed ID do artigopmc : PubMed Central ID do artigoarticle_title : título do artigo citadojournal : Nome do Jornaljournal_type : tipo de diáriopmid_cited : PubMed ID do artigo que o artigo citadoi_cited : doi do artigo que o artigo citayear : Ano da publicação como aparece na referência (pode incluir sufixo de carta, EG2007A) dicts_out = pp . parse_pubmed_references ( path ) # return list of dictionary A função parse_pubmed_caption pode analisar legendas de imagem de um determinado caminho para o arquivo XML. Ele retornará o índice de referência que você pode consultar de volta às imagens reais. A função retornará a lista de dicionários que possuem as seguintes chaves
pmid : PubMed IDpmc : PubMed Central IDfig_caption : String of Legendfig_id : ID de referência para a Figura (Use para consultar no artigo XML)fig_label : rótulo da figuragraphic_ref : referência ao nome do arquivo de imagem fornecido no PubMed OA dicts_out = pp . parse_pubmed_caption ( path ) # return list of dictionary Para alguém que pode estar interessado em analisar o texto em torno de uma citação, a biblioteca também fornece essa funcionalidade. Você pode usar parse_pubmed_paragraph para analisar o texto e referenciar PMIDs. Esta função retornará uma lista de dicionários, onde cada entrada terá as seguintes chaves:
pmid : PubMed IDpmc : PubMed Central IDtext : Texto completo do parágraforeference_ids : Lista de código de referência dentro desse parágrafo. Esses IDs podem se fundir com a saída de parse_pubmed_references .
section : Seção do parágrafo (por exemplo, plano de fundo, discussão, apêndice, etc.) dicts_out = pp . parse_pubmed_paragraph ( 'data/6605965a.nxml' , all_paragraph = False ) Você pode usar parse_pubmed_table para analisar a tabela do arquivo XML. Esta função retornará a lista de dicionários, onde cada um tem as seguintes chaves.
pmid : PubMed IDpmc : PubMed Central IDcaption : Legenda da tabelalabel : Lable da tabelatable_columns : Lista de nome da colunatable_values : lista de valores dentro da tabelatable_xml : texto xml bruto da tabela (retornar se return_xml=True ) dicts_out = pp . parse_pubmed_table ( 'data/medline16n0902.xml.gz' , return_xml = False ) O MEDLINE XML possui um formato XML diferente do que o PubMed Open Acesso. A estrutura dos arquivos XML pode ser encontrada no Medline/PubMed DTD aqui. Você pode usar a função parse_medline_xml para analisar esse formato. Esta função retornará a lista de dicionários, onde cada elemento contém:
pmid : PubMed IDpmc : PubMed Central IDdoi : doiother_id : outros IDs encontrados, cada um separado por ;title : Título do Artigoabstract : Resumo do artigoauthors : autores, cada um separado por ;mesh_terms : lista de termos de malha com ID de malha correspondente, cada um separado por ; Por exemplo 'D000161:Acoustic Stimulation; D000328:Adult; ...publication_types : lista da lista de tipos de publicação, cada uma separada por ; Por exemplo, 'D016428:Journal Article'keywords : lista de palavras -chave, cada uma separada por ;chemical_list : lista de termos químicos, cada um separado por ;pubdate : data de publicação. Padrões apenas para informações do ano.journal : Jornal do artigo fornecidomedline_ta : Esta é a abreviação do nome do diárionlm_unique_id : nlm identificação únicaissn_linking : ISSN Linkage, normalmente use para vincular o conjunto de dados da Web of Sciencecountry : país extraído do campo de informações do diárioreference : String de PMID cada um separado por ; ou lista de referências feitas ao artigodelete : Booleano se False significa que o papel foi atualizado para ter doislanguages : lista de idiomas, separados por ;vernacular_title : título vernacular. Padrões de esvaziar a string sempre que não disponível.XMLs para o mesmo papel. Você pode excluir o registro de papel excluído porque ele foi atualizado.
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 extrair informações do mês e do dia do Pubdate, defina year_info_only=True . Também permitimos analisar abstrato estruturado e podemos controlar a exibição de cada seção ou rótulo alterando o argumento nlm_category .
Use parse_grant_id para analisar os IDs de concessão do MEDLINE do arquivo XML. Isso retornará uma lista de dicionários, cada um contendo
pmid : PubMed IDgrant_id : ID de concessãogrant_acronym : sigla de concessãocountry : país onde concede financiamento deagency : agência de concessão Se nenhum ID de concessão for encontrado, ele retornará None
Você pode usar o analiser do PubMed para analisar o arquivo XML de e-utities usando parse_xml_web . Para esta função, você pode fornecer um único pmid como uma entrada e obter um dicionário com as seguintes chaves
title : Títuloabstract : Resumojournal : Jornalaffiliation : Afiliação do Primeiro Autorauthors : String of Authors, separados por ;year : Ano de Publicaçãokeywords : palavras -chave ou termos de malha do artigo dict_out = pp . parse_xml_web ( pmid , save_xml = False ) A função parse_citation_web permite obter as citações para um determinado ID do PubMed ou PubMed Central ID. Isso retornará um dicionário que contém as seguintes chaves
pmc : PubMed Central IDpmid : PubMed IDdoi : doi do artigon_citations : Número de citações para determinados artigospmc_cited : Lista de PMCs que citam o PMC fornecido dict_out = pp . parse_citation_web ( doc_id , id_type = 'PMC' ) A função parse_outgoing_citation_web permite que você obtenha os artigos que um determinado artigo cita, dado um PubMed ID ou PubMed Central ID. Isso retornará um dicionário que contém as seguintes chaves
n_citations : número de artigos citadosdoc_id : o identificador de documento dadoid_type : o tipo de identificador dado. 'PMID' ou 'PMC'pmid_cited : Lista de PMIDs citados pelo artigo dict_out = pp . parse_outgoing_citation_web ( doc_id , id_type = 'PMID' ) Os identificadores devem ser passados como cordas. O PubMed Central IDs é padrão e deve ser passado como cordas sem o prefixo 'PMC' . Se nenhuma citações for encontrada, ou se nenhum artigo for encontrado correspondente doc_id no banco de dados indicado, ele não retornará None .
Você pode instalar a versão mais atualizada do pacote diretamente do repositório
pip install git+https://github.com/titipata/pubmed_parser.gitou instalar uma versão recente com Pypi usando
pip install pubmed-parser ou clonar o repositório e instalar usando pip
git clone https://github.com/titipata/pubmed_parser
pip install ./pubmed_parser Você pode testar sua instalação executando pytest --cov=pubmed_parser tests/ --verbose na raiz do repositório.
Um exemplo de uso é mostrado o seguinte
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 é um snippet para analisar All PubMed Open Acep Subster 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 a pasta Scripts para obter mais informações.
e colaboradores
Se você usar o analisador PubMed, cite -o de Joss da seguinte maneira
Achakulvisut et al., (2020). PubMed Parser: Um analisador Python para o subconjunto XML de acesso aberto do PubMed e Medline XML DataSet XML DataSet. Journal of Open Source Software, 5 (46), 1979, https://doi.org/10.21105/joss.01979
ou usando 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}
}
Congratulamo -nos com contribuições de quem gostaria de melhorar o PubMed Parser. Você pode criar problemas do GitHub para discutir questões ou questões relacionadas ao repositório. Sugerimos que você leia nossas diretrizes contribuintes antes de criar problemas, relatar bugs ou fazer uma contribuição para o repositório.
Este pacote é desenvolvido no laboratório de Konrad Kording na Universidade da Pensilvânia. Gostaríamos de agradecer aos revisores e ao editor de Joss, incluindo tleonardi , timClicks e majensen . Eles tornaram nosso repositório muito melhor!
MIT Licença Copyright (c) 2015-2020 Titipat Achakulvisut, Daniel E. Acuna