You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于文献DataFrame获取通讯作者?求教RefManage等工具方案

获取文献通讯作者的可行方案

一、利用R语言的rcrossref包调用CrossRef API

CrossRef的元数据中多数期刊会提交通讯作者标识,可通过API批量查询:

  1. 安装并加载包:
install.packages("rcrossref")
library(rcrossref)
  1. 批量处理你的文献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导入结构化文献数据,可尝试提取通讯作者:

  1. 安装并加载包:
install.packages("RefManageR")
library(RefManageR)
  1. 循环处理每个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:10:49