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

yduiuuwa  于 2022-12-24  发布在  Python
关注(0)|答案(5)|浏览(130)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

我们不允许问题寻求有关书籍、工具、软件库等的推荐。你可以编辑问题,以便可以使用事实和引用来回答问题。
两年前关闭了。
Improve this question
我正在使用Python 3.4,需要从PDF中提取所有文本,然后使用它进行文本处理。
我所看到的所有答案都是Python 2.7的建议选项。
我需要Python 3.4中的一些东西。
邦森

az31mfrm

az31mfrm1#

您需要安装PyPDF 2包才能在Python中使用PDF。PyPDF 2可以提取文本/图像。文本以Python字符串的形式返回。要安装它,请在命令行运行pip install PyPDF2。此模块名称区分大小写,因此请确保以小写形式键入'y',并以大写形式键入所有其他字符。

import PyPDF2
reader = PyPDF2.PdfReader('my_file.pdf')
print(len(reader.pages))  # gives '56'
page = reader.pages[9]    #'9' is the page number
page.extract_text()

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

eqoofvh9

eqoofvh92#

pdfminer.six(https://github.com/pdfminer/pdfminer.six)在其他地方也被推荐过,它旨在支持Python 3。但我个人不能保证它,因为它在安装MacOS时失败了。(这是一个公开的问题,似乎是最近的问题,所以可能有一个快速修复。)

2w2cym1i

2w2cym1i3#

补充**@Sarah的**答案。PDFMiner是一个不错的选择。我已经使用它很长时间了,直到现在,它在从PDF中提取文本内容方面工作得很好。我所做的是创建一个函数,该函数使用pdfminer的CLI客户端,然后将输出保存到变量中(我可以稍后在其他地方使用)。我正在使用的Python版本是X1 M0 N1 X,函数运行得相当好,完成了所需的工作,也许这对你有用

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

yizd12fk

yizd12fk4#

slate3k非常适合提取文本。我已经用Python 3.7.3测试了一些PDF文件,它比PyPDF2精确得多。它是slate的一个分支,slate是PDFMiner的一个 Package 器。下面是我使用的代码:

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

cuxqih21

cuxqih215#

import pdfreader
pdfFileObj = open('/tmp/Test-test-test.pdf','rb')
viewer = SimplePDFViewer(pdfFileObject)
viewer.navigate(1)
viewer.render()
viewer.canvas.strings

相关问题