美文网首页
Python从PDF里提取文本

Python从PDF里提取文本

作者: 赤色要塞满了 | 来源:发表于2022-03-03 11:30 被阅读0次

    业务需要,批量提取下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了。

    相关文章

      网友评论

          本文标题:Python从PDF里提取文本

          本文链接:https://www.haomeiwen.com/subject/zecyrrtx.html