在 Python 3.4 中从 PDF 中提取文本的最佳工具 [关闭]

Posted

技术标签:

【中文标题】在 Python 3.4 中从 PDF 中提取文本的最佳工具 [关闭]【英文标题】:Best tool for text extraction from PDF in Python 3.4 [closed] 【发布时间】:2015-12-16 12:15:38 【问题描述】:

我使用的是 Python 3.4,需要从 PDF 中提取所有文本,然后将其用于文本处理。

我看到的所有答案都建议了 Python 2.7 的选项。

我需要 Python 3.4 中的一些东西。

邦森

【问题讨论】:

不知道为什么投反对票。正如我所提到的,我检查了所有可用的,也在谷歌上。我发现可以与 Python 3.4 一起使用的唯一一个是在这个 xPDF detail 中,所有其他的都是 2.7 版。我在 Python 3.4 版上一无所获。要求在投反对票时也发表评论。 这是一个很好但公然离题的问题。使用SoftwareRecs 进行图书馆推荐。 你可以试试这个解决方案,它在 python 3 Link 中运行良好 pdfplumber 是最好的选择。 [Reference] 【参考方案1】:
import pdfreader
pdfFileObj = open('/tmp/Test-test-test.pdf','rb')
viewer = SimplePDFViewer(pdfFileObject)
viewer.navigate(1)
viewer.render()
viewer.canvas.strings

【讨论】:

【参考方案2】:

slate3k 非常适合提取文本。我已经使用 Python 3.7.3 对几个 PDF 文件进行了测试,例如,它比 PyPDF2 准确得多。它是 slate 的一个分支,它是 PDFMiner 的包装器。这是我正在使用的代码:

import slate3k as slate

with open('Sample.pdf', 'rb') as f:
    doc = slate.PDF(f)

doc
#prints the full document as a list of strings
#each element of the list is a page in the document

doc[0]
#prints the first page of the document

感谢 GitHub 上的此评论: https://github.com/mstamy2/PyPDF2/issues/437#issuecomment-400491342

【讨论】:

【参考方案3】:

补充 @Sarah 的 答案。 PDFMiner 是一个不错的选择。我已经使用它很长一段时间了,直到现在它在从 PDF 中提取文本内容方面效果很好。我所做的是创建一个使用CLI client from pdfminer 的函数,然后将输出保存到一个变量中(稍后我可以在其他地方使用)。我使用的 Python 版本是 3.6,该函数运行良好并且可以完成所需的工作,所以也许这对你有用:

def pdf_to_text(filepath):
    print('Getting text content for ...'.format(filepath))
    process = subprocess.Popen(['pdf2txt.py', filepath], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = process.communicate()

    if process.returncode != 0 or stderr:
        raise OSError('Executing the command for  caused an error:\nCode: \nOutput: \nError: '.format(filepath, process.returncode, stdout, stderr))

    return stdout.decode('utf-8')

您当然必须导入子流程模块:import subprocess

【讨论】:

【参考方案4】:

pdfminer.six (https://github.com/pdfminer/pdfminer.six) 也已在其他地方推荐,旨在支持 Python 3。但我不能亲自担保,因为它在安装 MacOS 期间失败。 (有一个未解决的问题,它似乎是最近的问题,所以可能会有一个快速修复。)

【讨论】:

【参考方案5】:

您需要安装 PyPDF2 模块才能在 Python 3.4 中处理 PDF。 PyPDF2 不能提取图像、图表或其他媒体,但它可以提取文本并将其作为 Python 字符串返回。要安装它,请从命令行运行 pip install PyPDF2。此模块名称区分大小写,因此请确保输入小写的“y”,所有其他字符均输入大写。

>>> import PyPDF2
>>> pdfFileObj = open('my_file.pdf','rb')     #'rb' for read binary mode
>>> pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
>>> pdfReader.numPages
56
>>> pageObj = pdfReader.getPage(9)          #'9' is the page number
>>> pageObj.extractText()

最后一条语句返回“my_file.pdf”文档第 9 页中可用的所有文本。

【讨论】:

嗨,Ritesh,你很可能知道这个问题的答案。 Question. 轻微修正 - 认为应该在第二行的 open 命令中引用 "rb" 而不仅仅是 rb。 此外,pypdf2 中的页面是零索引的,即getPage(9) 将为您提供第 10 页。 pypdf2完全忽略了原始文档中的页码。 注意:a)在 Py3 中不支持,b)如果它有一个不可解析的 unicode(例如 " )github.com/mstamy2/PyPDF2/issues/37 并且它是不可预测的,正如上面其他人所评论的那样,它会忽略整个单词。它是一个很好的工具,但遗憾的是不适用于生产代码:( 2 年了,他们还没有修复这个错误github.com/mstamy2/PyPDF2/issues/254 我更愿意找到一个得到适当支持的包。这个不能处理python 3。

以上是关于在 Python 3.4 中从 PDF 中提取文本的最佳工具 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在java中从PDF中提取文本的最佳方法

如何在 JavaScript 中从 PDF 中提取文本

在python中从PDF中提取图像而不重新采样?

在 Python 中从 PDF 中提取页面大小

如何使用 PDFrw 在 Python 中从 PDF 中提取数据

在python中从HTML中提取文本[重复]