Hom's Blog


Python:获取文献PDF文献doi

Get DOI number from PDF file based on python


只能针对第一页具有doi号并且pdf不是扫描版..

需要安装python模块: pdfminer
测试在python 2.7.10 上实现.

原理

  • pdfminer读取pdf首页 (以后可以加入选项读取指定页码). 参考
  • 正则表达式从输出内容中抓取doi号 (只支持10.*/*形式, 要是10.*.*暂不支持). 参考

这里的有点问题..

'\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'<>])\S)+)\b'

  • 这条式子对于ACS有些doi以+结尾会误判, 忽略掉+号.
    改进: '\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?!["&\'<>])\S)+)(?:\+?|\b)'
  • 在抓首页doi时有时会遇上恶心的|会出问题.
    改进: '\b(10[.][0-9]{4,}(?:[.][0-9]+)*/(?:(?![\|"&\'<>])\S)+)(?:\+?|\b)'

仍有的问题

  • 对于校正类paper, 或者个别paper引用别的doi, 此时抓出来的是引用的doi, 而并非本paper的doi (或者可以根据抓取得到的doi数量来判断??)
  • 对于SI..有时SI也会抓出SI..这就不对了..
  • 对于老文献: 老文献没有doi..
  • 对于扫描版: 扫描版抓不出数据

使用

# 获取一个/多个pdf文件doi
# 输出屏幕: 文件名 Found: doi号
python getfiledoi.py a.pdf b.pdf c.pdf Done/*.pdf

# 根据doi号重命名文件, -r 选项
# 文件名为: 出版商号@文献号 , 如10.1021@jp123456f
python getfiledoi -r a.pdf

# 只输出doi号, 没有就空输出
python getfiledoi -d a.pdf


◆ 本文地址: http://platinhom.github.io/2015/12/21/getpdfdoi/, 转载请注明 ◆

前一篇: python正则表达式
后一篇: Python:使用浏览器打开网页


Contact: Hom / 已阅读()
Source 类别: Coding  标签: Python