一个同学说他们以后要读研有这样一个需求, 在上交所搜集上市公司的各种报告, PDF格式, 手工搜集提取整理数据要做几个月. 然后给我华丽丽的演示了一个他们找人写的工具, 自动搜集PDF并且提取数据写入表格, 解开那jar看了一下用到了Apache的PDFBox, 我想这也太dirty了吧, 真忍不了 ... 上交所那货至少不是还提供了一个XBLR接口么 ... 今天又说花了几天时间开了n台机器终于跑完了, 本人表示默默路过 ...
好吧, 为了无限可能的dirty job, 几个十分无奈的PDF文本提取的选择(排除需要OCR这货的情况):
Linux下poppler-utils中的pdftotext.
$ for f in *.pdf > do > pdftotext "$f" > done |
测试了一下, 速度不错, 对中文支持很好. 在R中直接调用也非常方便.
第二个选择, stackoverflow上推荐的PDF Miner, CJK支持什么的, 安装起来稍微有点麻烦, 支持竖排文档, 支持密码访问, 支持提取TOC信息, 纯python, 速度慢.
$ pdf2txt.py -P password -c gb2312 -o foo.txt foo.pdf |
第三个选择, python recipes中提到的pyPdf方案.
import pyPdf def getPDFContent(path): content = "" # 读入文件 pdf = pyPdf.PdfFileReader(file(path, "rb")) # 循环所有页 for i in range(0, pdf.getNumPages()): # 提取文本 content += pdf.getPage(i).extractText() + "\n" # 处理空格 content = " ".join(content.replace(u"\xa0", " ").strip().split()) return content print getPDFContent("test.pdf").encode("ascii", "ignore") |
更底层的lib倒是有一堆可以选择, 仁者见仁了.