我最近使用了优秀的rplos
package,这使得搜索公共科学图书馆(PLOS)API上的论文非常容易。我遇到了麻烦,因为API本身似乎有一些缺失的信息 - 一个主要的问题是至少有2012年关于API的论文在“期刊”领域没有任何信息。我有每篇论文的DOI,所以对于谷歌这个DOI来说很简单,并且表明这些是在真实期刊上发表的真实论文,通常是PLoS ONE。显然,这样做会很愚蠢。
我想知道是否有人知道如何找到源期刊,如果我有DOI列表?我查看了RISmed package,它显然可以从R中搜索PubMed,但我无法弄清楚如何让它提供有用的信息(只是搜索命中的数量,以及一些可能导致信息的PubMed ID我想要)。
任何人都知道如何将DOI列表转换为源日记帐名称?
编辑:我想到了另一个简单的解决方案。 DOI包含期刊名称的缩写,对于这样的情况,只有少数期刊,可以使用正则表达式来读取DOI并选择它们来自哪个期刊。示例:10.1371 / journal。 pone .0046711来自PLoS ONE。答案 0 :(得分:3)
这是基于托马斯建议尝试rpubmed的答案。它首先列出有问题的DOI,使用RISmed中的EUtilsSummary函数找到匹配的PubMed ID号,然后使用从Github for rpubmed修改的代码获取与这些相关的日志数据,并在下面重现。很抱歉编辑了rpubmed代码,但第44行上的对象似乎没有定义或必不可少所以我把它们拿出来了。
library(RCurl); library(XML); library(RISmed); library(multicore)
# dummy list of 5 DOIs. I actually have 2012, hence all the multicoring below
dois <- c("10.1371/journal.pone.0046711", "10.1371/journal.pone.0046681", "10.1371/journal.pone.0046643", "10.1371/journal.pone.0041465", "10.1371/journal.pone.0044562")
# Get the PubMed IDs
res <- mclapply(1:length(dois), function(x) EUtilsSummary(dois[x]))
ids<-sapply(res,QueryId)
######## rpubmed functions from https://github.com/rOpenHealth/rpubmed/blob/master/R/rpubmed_fetch.R
fetch_in_chunks <- function(ids, chunk_size = 500, delay = 0, ...){
Sys.sleep(delay * 3600) # Wait for appropriate time for the server.
chunks <- chunker(ids, chunk_size)
Reduce(append, lapply(chunks, function(x) pubmed_fetch(x, ...)))
}
pubmed_fetch <- function(ids, file_format = "xml", as_r_object = TRUE, ...){
args <- c(id = paste(ids, collapse = ","), db = "pubmed", rettype = file_format, ...)
url_args <- paste(paste(names(args), args, sep="="), collapse = "&")
base_url <- "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?retmode=full"
url_string <- paste(base_url, url_args, sep = "&")
records <- getURL(url_string)
#NCBI limits requests to three per second
Sys.sleep(0.33)
if(as_r_object){
return(xmlToList(xmlTreeParse(records, useInternalNodes = TRUE)))
} else return(records)
}
chunker <- function(v, chunk_size){
split(v, ceiling(seq_along(v)/chunk_size))
}
###### End of rpubmed functions
d<-fetch_in_chunks(ids)
j<-character(0)
for(i in 1:2012) j[i]<-as.character(d[[i]][[1]][[5]][[1]][[3]]) # the tortuous path to the journal name
答案 1 :(得分:2)
这是rplos的创造者......
查看包plosfields
附带的数据集,该数据集为您提供可以搜索的字段,并返回
library(rplos)
head(plosfields)
field description note
1 id DOI (Digital Object Identifier) Extended for partial documents
2 everything All text in the article Includes Meta information
3 title Article Title no note
4 title_display Article Title For display purposes only
5 alternate_title Alternative Title no note
6 author Author Can have multiple values
期刊名称的两个感兴趣字段是journal
和cross_published_journal_key
。例如,
searchplos('science', 'id,publication_date,cross_published_journal_key,journal', limit = 2)
id cross_published_journal_key journal publication_date
1 10.1371/journal.pbio.0020122 PLoSBiology PLoS Biology 2004-04-13T00:00:00Z
2 10.1371/journal.pbio.1001166 PLoSBiology PLoS Biology 2011-10-04T00:00:00Z
这样做你想要的吗?
在从DOI获取更多信息方面rmetadata
正在开发中,但可能有用。我们还在为Crossref创建一个包,rcrossref
。 (https://github.com/ropensci/rcrossref) - 但看起来上面做了你想要的更容易,获得期刊名称。
答案 2 :(得分:0)
这是我的解决方案,可用于for循环或其他方法来从DOI中提取标题:
library(RISmed)
data(myeloma)
ArticleId(myeloma)
res <- EUtilsSummary(ArticleId(myeloma)[10])
fetch <- EUtilsGet(res, type = "efetch", db = "pubmed")
fetch@Title
希望有帮助!