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!!!
  • 相关阅读:
    操作系统简介
    计算机硬件知识整理
    使用 Docker LNMP 部署 PHP 运行环境
    Chart.js 动态图表的使用
    手把手教你使用 GitBook
    手把手教你发布自己的 Composer 包
    PHP 基础篇
    macOS 上安装 PECL
    Yii2 教程
    PHP 基础篇
  • 原文地址:https://www.cnblogs.com/canglongdao/p/15086890.html
Copyright © 2011-2022 走看看