起因:在工作中需要阅读文献,其中的一些基本信息,例如文章作者,发表刊物,影响因子等,自己懒,不想一一整理
基本利用思路:利用R语言中的RISmed包检索并进行返回需要的基本信息,如第一作者,责任作者,作者单位,发表期刊,这些都是RISmed包中既有的函数可以得到的,然后利用下载的期刊影响因子列表提取IF,最后把上述信息输出成为excel表格。
上述功能很多软件都能做,我想以上面为基础做下面的事:
1. 筛选最相关的研究:pubmed的结果大家都知道是比较全面的,但是有时候冗余比较多,如何进一步分析自动筛选最相关的研究是一个问题。
2. 进一步筛选引用了某一论文的论文。
3. 通过文本分析,得到相关研究的发展趋势是另外一个问题。这两个问题涉及到各个专业的特性,不是仅仅用一下文本分析,词频等等就可以的。我想可能与专业论文撰写习惯,专业词汇表的建立,专业词汇的权重等等诸多问题有关。之后再研究。
现在的脚本很简单,但是好歹现在解决了第一个问题:我拿到文献了!!(撒花,撒花……小白做成了一点小事后莫名的开心)
脚本分享一下。我不是搞软件的,也不是专门做情报分析的,纯粹个人恶趣味,非要把其他软件能做的事情用R做一下。因为其实很简单,学习交流用。
##说明:采用RISmed包,检索pubmed,关键词可根据pubmed检索技巧填写。
##(cont)可设置检索时间范围,可输出2018影响因子,主题词,等信息
##(cont)与在pubmed上检索比对,最新的几篇文献检索不到,其他的基本类似
##(cont)可输出每次应用的log
library(tidyverse)
library(RISmed)
library(openxlsx)
library(lubridate)
library(readxl)
#searching
#example for key words, myeloma[ti] jones[au]
#ab, ad:address, ta:journal name
#logic: AND OR NOT
purpose <- "training"
key_words <- c("pinkeye")
date_range_min = 2015
latest <- year(ymd(Sys.Date()))
date_range_max = latest
res <- EUtilsSummary(query = key_words, type = "esearch", db = "pubmed", datetype = "ppdt",
mindate = date_range_min, maxdate = date_range_max, retmax = 500)
query_word <- QueryTranslation(res)
query_word
number <- QueryCount(res)
number
#retreival journal name####
journal <- ISOAbbreviation(EUtilsGet(res))
full_journal <- tolower(Title(EUtilsGet(res)))
#impact factor####
if2018 <- read_excel("retrieval papers from ncbi/2018年最新影响因子.xlsx",
col_types = c("numeric", "text", "text",
"numeric", "numeric"))
if2018$Total_Cites <- as.numeric(gsub(",","",if2018$Total_Cites))
if2018$Full_Journal_Title <- tolower(if2018$Full_Journal_Title)
if2018_final <- left_join(data.frame(full_journal), if2018, by = c("full_journal" = "Full_Journal_Title"))
#author####
authors <- Author(EUtilsGet(res))
author_1st <- c()
l <- length(authors)
for (i in 1:l) {
names <- authors[[i]][authors[[i]]$order == 1,]
name <- paste(names$LastName, names$Initials, sep = ",")
author_1st <- c(author_1st, name)
}
author_last <- c()
for (i in 1:l) {
total_author <- nrow(authors[[i]])
names <- authors[[i]][authors[[i]]$order == total_author,]
name <- paste(names$LastName, names$Initials, sep = ",")
author_last <- c(author_last, name)
}
#titles####
titles <- ArticleTitle(EUtilsGet(res))
#affiliations####
affiliations <- Affiliation(EUtilsGet(res))
affiliation_1st <- c()
for (i in 1:l) {
aff <- affiliations[[i]][1]
affiliation_1st <- c(affiliation_1st, aff)
}
#pub time####
year_pub <- YearPubmed(EUtilsGet(res))
#citation times####
cited_num <- Cited(EUtilsGet(res))
#article ID####
article_id <- ArticleId(EUtilsGet(res))
#mesh####
meshes <- Mesh(EUtilsGet(res))
mesh <- c()
for (i in 1:l) {
if (is.na(meshes[[i]])) {
mesh2 <- NA
mesh <- c(mesh, mesh2)
}
else {
mesh1 <- meshes[[i]]
n <- nrow(mesh1)
mesh2 <- mesh1$Heading[1]
for (j in 2:n) {
mesh2 <- paste(mesh2, mesh1$Heading[j], sep = ", ")
}
mesh <- c(mesh, mesh2)
}
}
#combine all####
all_output <- data.frame(journal, year_pub, IF = if2018_final$Journal_Impact_Factor,author_1st, author_last, cited_num,
affiliation_1st, titles, mesh, article_id)
all_output %>% View()
path <- paste(key_words, ".xlsx")
write.xlsx(all_output, path)
#Log file####
Sys.Date()
purpose
key_words
query_word
number
log_exist <- read_excel("log for RISmed search.xlsx")
log_exist$date <- as.Date(log_exist$date)
log_present <- data.frame(date = Sys.Date(), purpose, key_words, query_word, number)
log_present <- bind_rows(log_exist, log_present)
write.xlsx(log_present, "log for RISmed search.xlsx", overwrite = T)