Python3.9 PDFMiner3k提取PDF为txt文档

记录下在使用PDFMiner3k时遇到的问题
这里是博主
点击链接查看

 
import urllib
import importlib,sys
importlib.reload(sys)
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfdevice import PDFDevice
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
 
 
def parse(DataIO, save_path):
 
    #用文件对象创建一个PDF文档分析器
    parser = PDFParser(DataIO)
    #创建一个PDF文档
    doc = PDFDocument()
    #分析器和文档相互连接
    parser.set_document(doc)
    doc.set_parser(parser)
    #提供初始化密码,没有默认为空
    doc.initialize()
    #检查文档是否可以转成TXT,如果不可以就忽略
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        #创建PDF资源管理器,来管理共享资源
        rsrcmagr = PDFResourceManager()
        #创建一个PDF设备对象
        laparams = LAParams()
        #将资源管理器和设备对象聚合
        device = PDFPageAggregator(rsrcmagr, laparams=laparams)
        #创建一个PDF解释器对象
        interpreter = PDFPageInterpreter(rsrcmagr, device)
 
        #循环遍历列表,每次处理一个page内容
        #doc.get_pages()获取page列表
        for page in doc.get_pages():
            interpreter.process_page(page)
            #接收该页面的LTPage对象
            layout = device.get_result()
            #这里的layout是一个LTPage对象 里面存放着page解析出来的各种对象
            #一般包括LTTextBox,LTFigure,LTImage,LTTextBoxHorizontal等等一些对像
            #想要获取文本就得获取对象的text属性
            for x in layout:
                try:
                    if(isinstance(x, LTTextBoxHorizontal)):
                        with open('%s' % (save_path), 'a') as f:
                            result = x.get_text()
                            print (result)
                            f.write(result + "\n")
                except:
                    print("Failed")
 
 
if __name__ == '__main__':
    #解析本地PDF文本,保存到本地TXT
    with open(r'E:\parse_pdf\3.pdf','rb') as pdf_html:
        parse(pdf_html, r'E:\parse_pdf\d.txt')
 
    #解析网络上的PDF,保存文本到本地
    # url = "https:"
    # pdf_html = urllib.urlopen(url).read()
    # DataIO = StringIO(pdf_html)
    # parse_pdf(DataIO, r'E:\parse_pdf')

但是报出了如下错误:

Traceback (most recent call last):
  File "D:\pythonProject\main.py", line 5, in <module>
    from pdfminer.pdfparser import PDFParser, PDFDocument
ImportError: cannot import name 'PDFDocument' from 'pdfminer.pdfparser' 

点击查阅该博客

from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

改为

from pdfminer.pdfpage import PDFTextExtractionNotAllowed

而后又报出

Traceback (most recent call last):
  File "D:\pythonProject\main.py", line 5, in <module>
    from pdfminer.pdfparser import PDFParser, PDFDocument
ImportError: cannot import name 'PDFDocument' from 'pdfminer.pdfparser'

参考该博客

from pdfminer.pdfparser import PDFParser, PDFDocument

改为

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter

接着又报出

Traceback (most recent call last):
  File "D:\pythonProject\main.py", line 63, in <module>
    parse(pdf_html, r'E:\知识图谱项目\d.txt')
  File "D:\pythonProject\main.py", line 21, in parse
    doc = PDFDocument()
TypeError: __init__() missing 1 required positional argument: 'parser'

doc = PDFDocument()

改为

doc = PDFDocument(parser)

然后删除或注释掉

   parser.set_document(doc)
    doc.set_parser(parser)
    # 提供初始化密码,没有默认为空
    doc.initialize()

并且将

 for page in doc.get_pages():

改为

for page in PDFPage.create_pages(doc): 

最后编译运行,完美解决。

注意!!!!

with open(r'E:\parse_pdf\3.pdf','rb') as pdf_html:
        parse(pdf_html, r'E:\parse_pdf\d.txt')

这里需要对路径改成自己的!!!!

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值