反向查找数字对象标识符给出引用表?

时间:2012-03-14 22:53:58

标签: xml r web-scraping mechanize doi

我有一个引用表,其中包括第一作者的姓氏,每个引文的标题,期刊,年份和页码。

我已在google docscsv version上发布了表格的前几行(并非所有记录都有doi)

我希望能够查询每个引文的数字对象标识符。对于标题,最好是查询可以处理“模糊匹配”。

我该怎么做?

该表目前在MySQL中,但以.csv文件开始和结束就足够了(我希望从开始到结束都能得到答案)(或者,因为我主要使用R,一个R数据帧) )。

3 个答案:

答案 0 :(得分:5)

我不知道有任何完整的软件包或函数已经执行此操作,但这是我将使用的一般方法。 crossref.org提供了一种基于网络的方法,用于根据http://www.crossref.org/guestquery/

的书目数据确定DOI

在该页面上有几种不同的搜索方式,包括最后一种采用XML格式搜索的方式。该页面包含有关如何创建适当的XML的信息。您需要通过HTTP提交XML(通过挑选页面以确定表单目的地以及需要包含的任何其他信息来确定详细信息),然后解析响应。

此外,您需要验证以自动方式执行此操作不会以任何方式违反网站的服务条款。


以下是crossref questquery的xml表单,可搜索的术语包括:article_title,author,year,journal_title,volume和first page:

<?xml version = "1.0" encoding="UTF-8"?>
<query_batch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xmlns="http://www.crossref.org/qschema/2.0"
  xsi:schemaLocation="http://www.crossref.org/qschema/2.0 http://www.crossref.org/qschema/crossref_query_input2.0.xsd">
<head>
   <email_address>test@crossref.org</email_address>
   <doi_batch_id>test</doi_batch_id>
</head>
<body>
  <query enable-multiple-hits="false|exact|multi_hit_per_rule|one_hit_per_rule|true"
            list-components="false"
            expanded-results="false" key="key">
    <article_title match="fuzzy"></article_title>
    <author search-all-authors="false"></author>
    <component_number></component_number>
    <edition_number></edition_number>
    <institution_name></institution_name>
    <isbn></isbn>
    <issn></issn>
    <volume></volume>
    <issue></issue>
    <year></year>
    <first_page></first_page>
    <journal_title></journal_title>
    <proceedings_title></proceedings_title>
    <series_title></series_title>
    <volume_title></volume_title>
    <unstructured_citation></unstructured_citation>
  </query>
</body>
</query_batch>

答案 1 :(得分:4)

这是一个悬而未决的问题。有更好和更糟的方法来攻击它,但首先要阅读Karen Coyle's summary这个问题。参考文献附带的文章也是优秀

简而言之,量化两个书目记录之间相同性的问题很难,并且大量的机器学习研究围绕着这个主题。

答案 2 :(得分:2)

这是两个选项

CSV上传

我找到了另一个有希望的解决方案,在实践中不如

那样有效

CrossRef允许您直接上传链接的csv,然后在此处执行文本查询:http://www.crossref.org/stqUpload/

然而,250个查询中只有18个(约7%)返回了一个doi。

XML查询

根据Brian Diggs的回答,这里尝试95%的工作 - 编写基于xml的查询,它仍然有一些需要使用sed进行删除的错误。但是在提交查询时我的“会话超时”的最大问题。

xml语法包含使用模糊匹配的选项。

doiquery.xml包含@Brians答案中的模板文本; citations.csv链接在上面。

library(XML)
doiquery.xml <- xmlTreeParse('doiquery.xml')

query <- doiquery.xml$doc$children$query_batch[["body"]]

citations <- read.csv("citations.csv")

new.query <- function(citation, query = query){
  xmlValue(query[["author"]]) <- as.character(citation$author)
  xmlValue(query[["year"]]) <- as.character(citation$year)
  xmlValue(query[["article_title"]][["text"]]) <- citation$title
  xmlValue(query[["journal_title"]]) <- citation$journal
  return(query)
}


for (i in 1:nrow(citations)){
  q <- addChildren(q, add.query(citations[i,]))
}
axml <- addChildren(doiquery.xml$doc$children$query_batch, q )

saveXML(axml, file = 'foo.xml')

CSV到XML转换器

Creativyst软件提供基于网络的CSV to XML转换器。

步骤:

  1. 在ElementID的字段
  2. 中输入列名
  3. DocID字段中的“文档”
  4. RowID字段中的“查询”
  5. 在“输入CSV文件”中复制/粘贴csv。
  6. 点击转换
  7. 另请参阅此相关问题:Shell script to parse CSV to an XML query?