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

Posted

技术标签:

【中文标题】如何使用 Python 从 PDF 文件中读取简单文本?【英文标题】:How to read simple text from a PDF file with Python? 【发布时间】:2020-05-10 16:07:07 【问题描述】:

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

试过了:

PDFminer、PDFminer.six 和 PDFminer3k,对于简单的工作来说似乎过于复杂,我找不到简单的工作示例

slate,在安装中得到了error,虽然可以从线程修复,但尝试时出错;可能使用了错误的 PDFminer,但不知道该使用哪个

PyPDF2 和 PyPDF3 但这些会产生垃圾,如 here 所述

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

pdftotext 安装失败

pdf2text 在“导入 pdf2text”时失败,当更改为“pdftotext”时无法导入“ImportError: cannot import name 'Extractor'”,即使pip list 显示已安装“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())

返回垃圾为:

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

【问题讨论】:

请不要关闭这个问题...我只是寻找一些有效的 Python 代码...如果 SO 不是为了那个,那它有什么用? 【参考方案1】:

基于 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

【讨论】:

我发现这个解决方案运行良好,但是如果您将输出与原始 pdf 文件进行比较,您会发现差异。句子被删减并重新排序。缺句等的段落 @Kamil 我想知道这些问题是特定 pdf 文件本身的产物还是它最初是如何创建的结果 @oldboy,这是个好问题。我在解析 PDF 时运气不佳。实际上,我发现将 PDF 转换为简单的 word 或 txt 文件,然后应用解析算法效果更好。这仅适用于解析单词,因为一旦您处理除文本(即图像)之外的任何其他内容,该过程就会中断。【参考方案2】:

@EquipDev 您的解决方案实际上对我来说效果很好,尽管它是制表符分隔而不是空格。我将对最后一行进行一些更改:

return text.replace('\t', ' ')#用空格替换制表符

【讨论】:

以上是关于如何使用 Python 从 PDF 文件中读取简单文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 从 PDF 表单中读取数据

如何使用 swift xcuitest 从 pdf 文件中读取数据

如何从python上的PDF文件中提取单词的多个实例?

如何使用 Django 框架从前端读取 pdf 文件?

如何在python中读取pdf文件而不在unix中转换它? [复制]

用python操作PDF文件