【问题标题】:Retrieve citations of a journal paper using R使用 R 检索期刊论文的引用
【发布时间】:2019-03-08 13:27:09
【问题描述】:

使用 R,我想获取引用科学期刊论文的文章列表。

我拥有的唯一信息是文章的标题,例如"叶绿素酚试剂测定蛋白质"。

是否有人可以通过制作一个我可以使用的可复制示例来帮助我?

这是我目前尝试过的。

R 包fulltext 似乎很有用,因为它允许检索链接到文章的 ID 列表。例如,我可以获取文章的 DOI:

library(fulltext)
res1 <- ft_search(query = "Protein measurement with the folin phenol reagent", from = "crossref")
res1 <- ft_links(res1)
res1$crossref$ids

同样,我可以通过在函数fulltext::ft_search 中设置from = "scopus"(并包含一个scopus API 密钥)来获取scopus id。

如果使用DOI,我可以使用R库rcrossref获取文章的引用次数:

rcrossref::cr_citation_count(res1$crossref$ids[1])

同样,如果我想使用 scopus id 而不是 DOI,我可以使用 R 包 rscopus

不幸的是,这些信息对我来说是不够的,因为我需要引用该论文的文章列表,而不是数量。

我在网上看到很多人使用scholar这个包。但是,如果我理解正确的话,我需要文章的作者拥有一个谷歌学者 ID,并且我必须找到一种方法来检索这个 ID。所以它看起来不是一个可行的解决方案。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 一个有趣的问题。你见过RCrawler吗?爬取网页并不是一件难事,因为您可以使用xpath/css 来提取这些代码中插入的数据。但是,期刊论文的全文是pdf 格式。因此,您需要弄清楚如何从在线 pdf 文件中提取数据。
  • 这意味着很多事情:i) 找到发表文章的期刊的网站,ii) 通过访问期刊网站获取文章,iii) 获得访问期刊的凭据网站,iv)下载pdf并抓取它。不确定这是正确的方法,除非我遗漏了什么。
  • 第 i、ii 部分可通过任何爬虫功能实现。仅当您拥有访问网站的有效凭据时,第三部分才可行。如果不是,它的黑客攻击,我认为像 SO 这样的论坛不适合它。第四部分,python 是你最好的选择。看到这个link
  • @Ashish,这是一个关于 R 的特定问题,而不是 python。即使您可以使用爬虫功能,这看起来也不适合该任务。您不想使用已经汇总所有期刊来源的标准工具(例如谷歌学者),而是希望从头开始创建新来源。你让事情变得更加复杂。
  • @Ashish,请记住这里不适合黑客。在 SO 上,如果您说您需要凭据,那只能意味着购买有效的访问权限。由于很难指望某人能够有效访问所有期刊网站,这就是为什么我说这个解决方案不是一个合理的解决方案。请避免在虚假指控上浪费时间,让我们坚持这个问题。

标签: r web-scraping citations google-scholar scopus


【解决方案1】:

获得 DOI 后,您可以使用 OpenCitations API 获取有关引用该文章的出版物的数据。通过https://opencitations.net/index/coci/api/v1/citations/{DOI} 使用rjson-package 访问API。字段名称citing 包含引用该出版物的所有出版物的 DOI 作为值。然后,您可以使用CrossRef's API 获取有关施引论文的更多元数据,例如标题、期刊、出版日期和作者(通过https://api.crossref.org/works/{DOI})。

Here is an example 来自 OpenCitations 的 API,有 3 次引用(截至 2021 年 1 月)。


这是一个可能的代码(与上面的示例相同):

opcit <- "https://opencitations.net/index/coci/api/v1/citations/10.1177/1369148118786043"

result <- rjson::fromJSON(file = opcit)

citing <- lapply(result, function(x){
  x[['citing']]
})
# a vector with three DOIs, each of which cite the paper
citing <- unlist(citing) 

现在我们有了带有三个 DOI 的向量 citing。然后您可以使用rcrossref 查找有关施引论文的基本信息,例如:

paper <- rcrossref::cr_works(citing[1])

# find out the title of that paper
paper[["data"]][["title"]]

# output: "Exchange diplomacy: theory, policy and practice in the Fulbright program"

由于您在citing 中有一个 DOI 向量,您也可以使用这种方法:

citingdata <- rcrossref::cr_cn(citing)

citingdata 的输出应该指向三篇施引论文的元数据,结构类似于以下两个示例:

[[1]]
[1] "@article{Wong_2020,\n\tdoi = {10.1017/s1752971920000196},\n\turl = {https://doi.org/10.1017%2Fs1752971920000196},\n\tyear = 2020,\n\tmonth = {jun},\n\tpublisher = {Cambridge University Press ({CUP})},\n\tpages = {1--31},\n\tauthor = {Seanon S. Wong},\n\ttitle = {One-upmanship and putdowns: the aggressive use of interaction rituals in face-to-face diplomacy},\n\tjournal = {International Theory}\n}"

[[2]]
[1] "@article{Aalberts_2020,\n\tdoi = {10.1080/21624887.2020.1792734},\n\turl = {https://doi.org/10.1080%2F21624887.2020.1792734},\n\tyear = 2020,\n\tmonth = {aug},\n\tpublisher = {Informa {UK} Limited},\n\tvolume = {8},\n\tnumber = {3},\n\tpages = {240--264},\n\tauthor = {Tanja Aalberts and Xymena Kurowska and Anna Leander and Maria Mälksoo and Charlotte Heath-Kelly and Luisa Lobato and Ted Svensson},\n\ttitle = {Rituals of world politics: on (visual) practices disordering things},\n\tjournal = {Critical Studies on Security}\n}"

【讨论】:

  • 感谢您的贡献。如果你提供一个可行的例子,我很乐意接受你的正确答案。
  • 我加了一个例子!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多