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!!!
  • 相关阅读:
    第三方模块加载时出现XXX运行 提示错误:无法加载文件 C:UsersgxfAppDataRoaming pmXXX.ps1,因为在此系统上禁止运行脚本。
    node模块化
    前端面试集锦
    将字符转换成驼峰表示法
    JavaScript数据处理
    大数据基础整合
    移动端网页特效
    本地存储
    DOM重点核心
    触发器SQL
  • 原文地址:https://www.cnblogs.com/canglongdao/p/15086890.html
Copyright © 2011-2022 走看看