优化pdfminer

时间:2017-08-03 02:20:51

标签: python python-3.x pdf optimization pdfminer

我正在尝试在生产环境中使用pdfminer.six来从pdf中提取文本。目前,对于我的基准44页文档,大约需要18秒。我想尽可能减少这一点。

到目前为止,我已经设法通过转动caching = False将时间缩短了3秒。有没有人建议如何进一步优化?据我所知,使用像多处理这样的模块并行处理页面是行不通的,因为底层的方法/功能无法被腌制。

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage

path = "PATH/TO/MYPDF.pdf
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams, showpageno= True)
fp = open(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = None
caching = False
pagenos=set()

for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
    interpreter.process_page(page)

text = retstr.getvalue()
fp.close()
device.close()
retstr.close()

1 个答案:

答案 0 :(得分:0)

我在 python 3.8 上使用 pdfminer。我有一个操作 pdf 文档内容的应用程序,虽然组装单词/标记并确定它们出现在表格文档中的位置非常繁琐,但我在 python 2.7 中运行良好,但移至 py3 和最新版本pdfminer 的版本,它运行得太慢以至于无法接受。因此,经过大量挖掘和分析我的代码后,我发现由于旧版本中的所有打印语句都已转换为日志语句,并且 pdfminer 模块创建的记录器都默认为 level.DEBUG,并且由于我已分配处理程序针对根记录器将日志消息写入文件,整体速度受到很大影响。 在导入 pdfminer 模块之后以及在实例化任何类或调用它们之前添加以下代码,现在它的运行速度可以接受。

# set all pdfminer logging to WARN
pdflogs = [logging.getLogger(name) for name in logging.root.manager.loggerDict if name.startswith('pdfminer')]
for ll in pdflogs:
    ll.setLevel(logging.WARNING)