Python从PDF里提取文本

业务需要,批量提取下PDF的文本,格式不格式无所谓。

安装

简单试了下,camelot,感觉不太好,没成功,加上官网说主要是提取表格,就先放弃了。

然后试了试pdfplumber,发现也不好用,简单的一个PDF居然也识别不全,放弃。

试试pdfminer吧,发现pdfminer3k也不好用,使用时老报一个连谷歌都搜不到的错误cannot import name "'DecipherCallable'"。只能卸载,换成pdfminer.six

pip install pdfminer.six

发现也不能用,与就把代码从https://github.com/pdfminer/pdfminer.six拖下来,本地安装:

python setup.py install

终于可以了。

import pdfminer
print(pdfminer.__version__)

显示20211012。提一下,如果需要安装opencv,且遇到问题,可以试试降版本:

pip3 install opencv-python==4.4.0.46

使用

最简单的:

from pdfminer.high_level import extract_text
text = extract_text('mypdf.pdf')

是可以提取文本的。还可以用这段代码:

from io import StringIO

from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser

output_string = StringIO()
with open('mypdf.pdf', 'rb') as in_file:
    parser = PDFParser(in_file)
    doc = PDFDocument(parser)
    rsrcmgr = PDFResourceManager()
    device = TextConverter(rsrcmgr, output_string, laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    for page in PDFPage.create_pages(doc):
        interpreter.process_page(page)

print(output_string.getvalue())

可以保留一些格式,也支持中文。

问题

有一些pdf发现全部乱码了,按说CJK的支持也安装了,存成文件也不行,不知道啥原因,暂未解决。不过我后来使用了一些其它工具进行转换,发现也是乱码,也就释然了。可能某些pdf就是不让转吧。

另外,这个库是无法识别图片上的文字的,It cannot recognize text drawn as images that would require optical character recognition。那还用什么opencv?看来只能调用AI了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容