如何使用 Python 从 PDF 文件中读取简单文本?

Equ*_*Dev 4 python pdf text python-3.x

需要解析 PDF 文件以仅提取文本的第一行,并寻找不同的 Python 包来完成这项工作,但没有任何运气。

尝试过:

  • PDFminerPDFminer.sixPDFminer3k,这对于简单的工作来说似乎过于复杂,我找不到一个简单的工作示例

  • slate,安装时出错,虽然使用线程修复,但尝试时出错;也许使用了错误的 PDFminer,但无法确定使用哪个

  • PyPDF2PyPDF3但这些给出了垃圾,如here所述

  • tika,它给出了不同的终端错误消息并且非常慢

  • pdftotext安装失败

  • pdf2text在“导入 pdf2text”时失败,当更改为“pdftotext”时,即使pip list显示已安装“Extractor”也无法导入“ImportError: cannot import name 'Extractor'”

通常我发现安装的 Python 包工作得非常好,但是将 PDF 解析为文本似乎是一个丛林,无数工具也表明了这一点。

关于如何在 Python 中将 PDF 文件简单解析为文本的任何建议?

添加了 PyPDF2 示例

PyPDF2 的一个例子是:

import PyPDF2
pdfFileObj = open('file.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageObj_0 = pdfReader.getPage(0)
print(pageObj_0.extractText())
Run Code Online (Sandbox Code Playgroud)

它返回垃圾为:

$%$%&%&$'('~!)"*+#

Equ*_*Dev 7

基于 pdfminer,我能够从pdf2txt.py脚本(与 pdfminer 一起提供)中提取必要的内容到一个函数中:

import io

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

def pdf_to_text(path):
    with open(path, 'rb') as fp:
        rsrcmgr = PDFResourceManager()
        outfp = io.StringIO()
        laparams = LAParams()
        device = TextConverter(rsrcmgr, outfp, laparams=laparams)
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        for page in PDFPage.get_pages(fp):
            interpreter.process_page(page)
    text = outfp.getvalue()
    return text
Run Code Online (Sandbox Code Playgroud)

  • 对此答案投了反对票,这实际上提供了一个有用的解决方案。请给出投反对票的理由,以便我可以学习:-) (2认同)