【问题标题】:Optimising pdfminer优化pdfminer
【发布时间】:2018-01-10 10:37:15
【问题描述】:

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

到目前为止,我已经通过转caching = False 将时间减少了 3 秒。有人对我如何进一步优化有建议吗?据我所知,使用像 multiprocessing 这样的模块来并行处理页面是行不通的,因为底层的方法/函数不能被腌制。

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()

【问题讨论】:

  • 你找到解决方案了吗?
  • @Taylor 我最终使用了一个名为 xpdf 的 C++ 库(可以在 Mac 上使用 brew 安装,或者在 Linux 上通过名为 poppler-utils 的包访问),我通过我的 Python 脚本中的 subprocess 模块。以更快的速度有效地执行与pdfminer 相同的任务
  • 谢谢 - 我需要看看那个。我找到了一种通过使用io.BytesIO 来完成此操作的方法,但它仍然相当慢。我看看你的方法。再次感谢!
  • @Edward Atkins 嘿,你能把代码示例作为答案吗?
  • apache tika 是我玩过的最快的库,但不幸的是它没有我需要的足够工具,但非常适合原始文本提取

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


【解决方案1】:

我在 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多