在文档或者页面中查找DOI

时间:2020-03-05 18:43:16  来源:igfitidea点击:

DOI系统对构成合理标识符的内容基本上没有任何有用的限制。但是,能够从PDF,网页等中提取DOI对于引用信息等非常有用。

有没有一种可靠的方法可以在不使用'doi:'前缀的情况下识别文本块中的DOI? (任何可接受的语言,首选使用正则表达式,并且必须避免误报)

解决方案

回答

以下正则表达式可以完成这项工作(Perl正则表达式语法):

/(10\.\d+\/\d+)/

我们可以通过打开网址来进行其他一些完整性检查

http://hdl.handle.net/<doi>

http://dx.doi.org/<doi>

候选土井在哪里,

并测试我们a)收到200 OK http状态,并且b)返回的页面不是该服务的"找不到DOI"页面。

回答

@Silas进行健全性检查是个好主意。但是,正则表达式并不涵盖所有DOI。第一个元素(当前)必须为10,第二个元素必须(当前)为数字,但第三个元素几乎没有限制:

"Legal characters are the legal graphic characters of Unicode. This specifically excludes the control character ranges 0x00-0x1F and 0x80-0x9F..."

这就是真正的问题所在。在实践中,我从未见过使用空格,但是规范专门允许这样做。基本上,似乎没有检测DOI结束的明智方法。

回答

我确定这对OP来说不是超级有用,但是我认为我会发布我正在尝试的内容,以防其他类似我的人偶然发现:

(10.(\d)+/(\S)+)

匹配:" 10点号斜线任何字符-非空格"

但是对于我的使用(抓取HTML),这是发现假阳性,因此我必须匹配上面的内容,并删除引号和大于/小于:

(10.(\d)+/([^(\s\>\"\<)])+)

我仍在测试这些,但到目前为止我感到充满希望。