zoukankan      html  css  js  c++  java
  • python3读取pdf文档;pdfminer3k

    背景:

      本人有个pdf文档,想提取里面的信息;

      方式1:使用电脑自带的记事本打开乱码;

      方式2:使用open(),读取,报错;

    下面尝试pdfminer3k,读取pdf文件成功;

    首先,安装pdfminer3k

     其次,使用如下代码,

    path 替换为自己pdf的路径、
    toPath 替换为自己txt(即pdf文档转换成txt文档)的路径;
    import sys
    import importlib
    importlib.reload(sys)
    
    from pdfminer.pdfparser import PDFParser, PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.converter import PDFPageAggregator
    from pdfminer.layout import LTTextBoxHorizontal, LAParams
    from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
    
    def readPDF(path, toPath):
        # 以二进制形式打开pdf文件
        with open(path, "rb") as f:
            # 创建一个pdf文档分析器
            parser = PDFParser(f)
            # 创建pdf文档
            pdfFile = PDFDocument()
            # 链接分析器与文档对象
            parser.set_document(pdfFile)
            pdfFile.set_parser(parser)
            # 提供初始化密码
            pdfFile.initialize()
            # 检测文档是否提供txt转换
        if not pdfFile.is_extractable:
            raise PDFTextExtractionNotAllowed
        else:
            # 解析数据
            # 数据管理
            manager = PDFResourceManager()
            # 创建一个PDF设备对象
            laparams = LAParams()
            device = PDFPageAggregator(manager, laparams=laparams)
            # 解释器对象
            interpreter = PDFPageInterpreter(manager, device)
    
            # 开始循环处理,每次处理一页
            for page in pdfFile.get_pages():
                interpreter.process_page(page)
                layout = device.get_result()
                for x in layout:
                    if(isinstance(x, LTTextBoxHorizontal)):
                        with open(toPath, "a") as f:
                            str = x.get_text()
                            # print(str)
                            f.write(str+"
    ")
    
    path = r"D:1.pdf"
    toPath = r"D:1.txt"
    readPDF(path, toPath)
    

    但是呢,我的诉求是,提取pdf文档的考点信息

    经过改良后的代码

    import sys
    import importlib
    importlib.reload(sys)
    import re #正则表达式
    
    from pdfminer.pdfparser import PDFParser, PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.converter import PDFPageAggregator
    from pdfminer.layout import LTTextBoxHorizontal, LAParams
    from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
    
    def readPDF(path, result):
        # 以二进制形式打开pdf文件
        with open(path, "rb") as f:
            # 创建一个pdf文档分析器
            parser = PDFParser(f)
            # 创建pdf文档
            pdfFile = PDFDocument()
            # 链接分析器与文档对象
            parser.set_document(pdfFile)
            pdfFile.set_parser(parser)
            # 提供初始化密码
            pdfFile.initialize()
            # 检测文档是否提供txt转换
        if not pdfFile.is_extractable:
            raise PDFTextExtractionNotAllowed
        else:
            # 解析数据
            # 数据管理
            manager = PDFResourceManager()
            # 创建一个PDF设备对象
            laparams = LAParams()
            device = PDFPageAggregator(manager, laparams=laparams)
            # 解释器对象
            interpreter = PDFPageInterpreter(manager, device)
    
            # 开始循环处理,每次处理一页
            for page in pdfFile.get_pages():
                interpreter.process_page(page)
                layout = device.get_result()
                for x in layout:
                    if(isinstance(x, LTTextBoxHorizontal)):
                        str = x.get_text()
                        result+=str
                        # with open(toPath, "a") as f:
                        #     str = x.get_text()
                            # print(str)
                            # f.write(str+"
    ")
            # print(result)
            n = re.findall('考点 (.*)', result)
            # print(n)
            for i in n:
                print(i)
    
    path = r"D:初会《初级会计实务》第八章——政府会计基础.pdf"
    # toPath = r"D:1.txt"
    r=''
    readPDF(path, r)
    

     运行结果

    1:政府会计标准体系
    2:政府会计要素及其确认和计量
    3:政府财务报告和决算报告
    4:政府会计核算模式
    5:单位会计核算概述
    6:国库集中支付业务
    7:非财政拨款收支业务
    8:预算结转结余及分配业务
    9:净资产业务
    10:资产业务
    11:负债业务 

      一共有几十个PDF文档,这样大大提升了效率,嘻嘻!!!

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    T4文本模板转换过程
    ARKit从入门到精通(6)-ARSession介绍
    ARKit从入门到精通(5)-ARScnView介绍
    ARKit从入门到精通(4)-ARKit全框架API大全
    ARKit从入门到精通(3)-ARKit自定义实现
    ARKit从入门到精通(2)-ARKit工作原理及流程介绍
    ARKit从入门到精通(1)-ARKit初体验
    ios系统中各种设置项的url链接
    iOS 检测网络状态 自动判断 认为提示网络改变
    ios 根据scrollview滑动的偏移计算滑动到第几页算法(不同需求不同计算)
  • 原文地址:https://www.cnblogs.com/canglongdao/p/15086890.html
Copyright © 2011-2022 走看看