如何基于文献DataFrame获取通讯作者?求教RefManage等工具方案
获取文献通讯作者的可行方案
一、利用R语言的rcrossref包调用CrossRef API
CrossRef的元数据中多数期刊会提交通讯作者标识,可通过API批量查询:
- 安装并加载包:
install.packages("rcrossref") library(rcrossref)
- 批量处理你的文献DataFrame:
假设你的DataFrame名为lit_df,执行以下代码提取通讯作者:
# 提取DOI列表 doi_list <- lit_df$reference_de_larticle_doi # 批量查询CrossRef元数据 crossref_results <- cr_works(dois = doi_list) # 从返回结果中筛选通讯作者 corr_authors <- lapply(crossref_results$data, function(item) { if (!is.null(item$author)) { # 筛选标记为通讯作者的条目 corr_entries <- item$author[sapply(item$author, function(a) a$`corresponding`)] if (length(corr_entries) > 0) { paste(corr_entries$family, corr_entries$given, sep = " ") } else { NA } } else { NA } }) # 将结果合并到原DataFrame lit_df$corresponding_author <- unlist(corr_authors)
注意:部分期刊未向CrossRef提交通讯作者信息,此时会返回NA,需后续处理。
二、使用RefManageR包提取元数据
RefManageR支持从DOI导入结构化文献数据,可尝试提取通讯作者:
- 安装并加载包:
install.packages("RefManageR") library(RefManageR)
- 循环处理每个DOI:
corr_authors <- c() for (doi in lit_df$reference_de_larticle_doi) { ref_entry <- ReadDOI(doi) # 优先读取通讯作者字段 if (!is.null(ref_entry$corresp)) { corr_authors <- c(corr_authors, ref_entry$corresp) } else { # 若无通讯作者字段,尝试从作者列表末尾推断(部分期刊通讯作者置于最后) corr_authors <- c(corr_authors, tail(ref_entry$author, 1)) } } # 合并结果到原DataFrame lit_df$corresponding_author <- corr_authors
注意:作者末尾推断是经验性规则,仅作备选,准确性无法保证。
三、补充方案
- 期刊开放元数据接口:部分期刊提供OAI-PMH等结构化元数据接口,可通过DOI拼接接口地址获取信息,比网页爬取更稳定,但需针对不同期刊调整逻辑。
- 手动补充:对于上述方法无法获取的条目,直接查看原文PDF的作者信息页手动补充,这是最可靠的方式。
内容的提问来源于stack exchange,提问作者IACPouembout
相关产品推荐
相关产品推荐

