在 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 中提取文本的最佳工具 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章