在 python 中使用 PDFMiner 从 PDF 文件中提取文本?

新手上路,请多包涵

我正在寻找有关如何使用 PDFMiner 和 Python 从 PDF 文件中提取文本的文档 示例。

看起来 PDFMiner 更新了他们的 API,我发现的所有相关示例都包含过时的代码(类和方法已更改)。我发现使从 PDF 文件中提取文本的任务更容易的库正在使用旧的 PDFMiner 语法,所以我不确定如何执行此操作。

事实上,我只是在查看源代码,看看我是否能弄明白。

原文由 RattleyCooper 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 933
2 个回答

这是使用当前版本的 PDFMiner(2016 年 9 月)从 PDF 文件中提取文本的工作示例

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

def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = open(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    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()
    return text

PDFMiner 的结构最近发生了变化,所以这应该适用于从 PDF 文件中提取文本。

编辑:截至 2018 年 6 月 7 日仍在工作。已在 Python 版本 3.x 中验证

编辑:该解决方案于 2019 年 10 月 3 日适用于 Python 3.7。我使用了 Python 库 pdfminer.six ,于 2018 年 11 月发布。

原文由 RattleyCooper 发布,翻译遵循 CC BY-SA 4.0 许可协议

这可以在 2020 年 5 月使用 Python3 中的 PDFminer 6 运行。

安装包

$ pip install pdfminer.six

导入包

from pdfminer.high_level import extract_text

使用保存在磁盘上的 PDF

 text = extract_text('report.pdf')

或者:

 with open('report.pdf','rb') as f:
    text = extract_text(f)

使用内存中已有的 PDF

如果 PDF 已经在内存中,例如,如果使用 requests 库从 Web 检索,则可以使用 io 库将其转换为流:

 import io

response = requests.get(url)
text = extract_text(io.BytesIO(response.content))

与 PyPDF2 相比的性能和可靠性

PDFminer.six 比 PyPDF2(某些类型的 PDF 失败)更可靠,尤其是 PDF 1.7 版

但是,使用 PDFminer.six 进行文本提取比 PyPDF2 慢 6 倍。

我在 15” MBP (2018) 上使用 timeit 对文本提取进行计时,仅对提取功能(无文件打开等)进行计时,并获得以下结果:10 页 PDF:

 PDFminer.six: 2.88 sec
PyPDF2:       0.45 sec

pdfminer.six 的占用空间也很大,需要安装 GCC 和其他东西的 pycryptodome,将 Alpine Linux 上的最小安装 docker 映像从 80 MB 推到 350 MB。 PyPDF2 没有明显的存储影响。

更新(2022-08-04) :根据 Martin Thoma 的说法,PyPDF2 在过去 2 年中有了很大的改进,所以也请尝试一下。这是他的 基准

原文由 Cornelius Roemer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题