【问题标题】:Fetching multiple pubmed abstract using r (httr)使用 r (httr) 获取多个 pubmed 摘要
【发布时间】:2021-09-13 10:32:25
【问题描述】:

这是我试图从这个问题执行的同一任务的延续。 Working with pubmed api in R (httr) to retrieve abstracts

使用下面的答案,我可以找到感兴趣的摘要的公开 ID。

现在,我正在尝试获取这些摘要的标题和全文(作为 2 列数据框,一列用于标题,一列用于摘要文本)。

我从api文档了解到的是可以传递多个ID,所以我尝试了下面的代码。


library(XML)
library(httr)
library(glue)
library(dplyr)
####
####



query = 'asthma[mesh]+AND+leukotrienes[mesh]+AND+2009[pdat]'

 
reqq = glue ('https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term={query}')


reqq = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]&usehistory=y"

op = GET(reqq)

content(op)


df_op <- op %>% xml2::read_xml() %>% xml2::as_list()

pmids <- df_op$eSearchResult$IdList %>% unlist(use.names = FALSE)

上面的代码将pmids作为一个字符获取,然后我尝试将它们传递给efetch

reqq1 = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=pmids&rettype=abstract&retmode=xml"

op1 = GET(reqq1)

content(op1)

我收到一条错误消息:ID 列表为空!可能它没有正确的 ID。

然后我尝试更改 ID 字符串的格式,使它们以逗号分隔,并且中间没有引号或空格。

idc = paste(shQuote(pmids, type = "cmd"), collapse = ", ")
 
idc = gsub('"', '', idc)
idc = gsub(' ', '', idc)

# Then pass them to the same code: 

reqq1 = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=idc&rettype=abstract&retmode=xml"

op1 = GET(reqq1)

content(op1)
 

但我仍然遇到与上述相同的错误。 我想要实现的是使用这些摘要的数据获取 xml 文件(然后最终将标题和摘要正文提取到数据框中)。 是否可以将所有 ID 传递到一次提取中,或者必须使用循环一个一个地发送这些 ID?如果您能提供一些指导或有一个可行的简短脚本,将不胜感激。

谢谢

【问题讨论】:

    标签: r xml pubmed pubmed-api


    【解决方案1】:

    reqq1 仍然只是一个字符串。您可以使用glue 来使用pmids 的实际值。我认为您可以同时查询多个 id,在这种情况下,您可以使用 paste0(..., collapse = ',') 将 id 折叠为一个逗号分隔的字符串。

    reqq1 = glue("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id={paste0(pmids, collapse = ',')}&rettype=abstract&retmode=xml")
    op1 = GET(reqq1)
    content(op1)
    
    {xml_document}
    <PubmedArticleSet>
    [1] <PubmedArticle>\n  <MedlineCitation Status="MEDLINE" Owner="NLM">\n    <PMID Version="1">19008416</PMID> ...
    [2] <PubmedArticle>\n  <MedlineCitation Status="MEDLINE" Owner="NLM">\n    <PMID Version="1">18927361</PMID> ...
    [3] <PubmedArticle>\n  <MedlineCitation Status="MEDLINE" Owner="NLM">\n    <PMID Version="1">18787170</PMID> ...
    [4] <PubmedArticle>\n  <MedlineCitation Status="MEDLINE" Owner="NLM">\n    <PMID Version="1">18487186</PMID> ...
    [5] <PubmedArticle>\n  <MedlineCitation Status="MEDLINE" Owner="NLM">\n    <PMID Version="1">18239126</PMID> ...
    [6] <PubmedArticle>\n  <MedlineCitation Status="MEDLINE" Owner="NLM">\n    <PMID Version="1">18239125</PMID> ... 
    

    【讨论】:

    • 谢谢。我认为我编写的代码使用了pmids 的实际值。 @Ronak,这也提取了所有摘要的数据。你有可以从 xml 中提取标题和摘要的代码吗?
    • 抱歉,我还没有真正从 xml 中提取数据,所以我无法为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多