温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python中解析PDF程序的示例分析

发布时间:2021-06-21 10:44:29 来源:亿速云 阅读:168 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关python中解析PDF程序的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

说在前面

和word的文本相比PDF更类似于一张张图片,图上放着一个个文字。对其的解析是将图片上的文字提取到text文件中,方便之后的分析。

添加依赖

在python的环境中安装PDFminer3k,不要装错了,一开始我装的是PDFminer,结果有几个包不能用
pip install pdfminer3k

源程序代码

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# pip3 install pdfminer3k

import os
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBoxHorizontal
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed
from pdfminer.pdfdevice import PDFDevice


def read_pdf(pdf_name, result_name):
    # 以二进制读模式打开
    fp = open(pdf_name, 'rb')
    # 用文件对象来创建一个pdf文档分析器
    parser = PDFParser(fp)
    # 创建一个pdf文档
    doc = PDFDocument()
    # 连接分析器 与文档对象
    parser.set_document(doc)
    doc.set_parser(parser)
    # 提供初始密码,如果没有密码 就创建一个空的字符串
    doc.initialize('')
    # 检测文档是否提供txt转换,不提供就抛出异常
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    # 创建PDf 资源管理器 来管理共享资源
    rsrcmgr = PDFResourceManager()
    # 创建一个PDF设备对象
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    # 创建一个PDF解释器对象
    interpreter = PDFPageInterpreter(rsrcmgr, device)

    with open(result_name, "w", encoding="u8") as fd_out:
        # 循环遍历列表,每次处理一个page的内容
        for i, page in enumerate(doc.get_pages(), 1):
            index = "===========《第{}页》===========".format(i)
            print(index)
            fd_out.write(index + "\n")
            interpreter.process_page(page)
            # 接受该页面的LTPage对象
            layout = device.get_result()
            for x in layout:
                # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox,
                # LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性
                if not isinstance(x, LTTextBoxHorizontal):
                    continue
                results = x.get_text()
                print(results)
                fd_out.write(results)

if __name__ == '__main__':

    # 获取读取文件夹
    filePath = '../PDFfile'
    #遍历文件夹
    for i,j,k in os.walk(filePath):
        for m in k:
            # 格式化输出的名称和地址
            result = '../TextFile/' + m[:-4] + '.txt'
            # 格式化源文件路径
            fileName = i + '/' + m
            # 调用函数解析
            read_pdf(fileName, result)

参考以下代码内容:python 读取pdf文本内容

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
# pip3 install pdfminer3k
  
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBoxHorizontal
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed
from pdfminer.pdfdevice import PDFDevice
 
def read_pdf(pdf_name, result_name):
    # 以二进制读模式打开
    fp = open(pdf_name, 'rb')
    # 用文件对象来创建一个pdf文档分析器
    parser = PDFParser(fp)
    # 创建一个pdf文档
    doc = PDFDocument()
    # 连接分析器 与文档对象
    parser.set_document(doc)
    doc.set_parser(parser)
    # 提供初始密码,如果没有密码 就创建一个空的字符串
    doc.initialize('')
    # 检测文档是否提供txt转换,不提供就抛出异常
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    # 创建PDf 资源管理器 来管理共享资源
    rsrcmgr = PDFResourceManager()
    # 创建一个PDF设备对象
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    # 创建一个PDF解释器对象
    interpreter = PDFPageInterpreter(rsrcmgr, device)
     
    with open(result_name,"w",encoding="u8") as fd_out:
        # 循环遍历列表,每次处理一个page的内容
        for i,page in enumerate(doc.get_pages(),1):
            index = "===========《第{}页》===========".format(i)
            print(index)
            fd_out.write(index + "\n")
            interpreter.process_page(page)
            # 接受该页面的LTPage对象
            layout = device.get_result()
            for x in layout:
                # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox,
                # LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性
                if not isinstance(x, LTTextBoxHorizontal):
                    continue
                results = x.get_text()
                print(results)
                fd_out.write(results)   
                       
if __name__ == '__main__':
    pdf_name = 'test.pdf'
    result = 'test.txt'
    read_pdf(pdf_name, result)

感谢各位的阅读!关于“python中解析PDF程序的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI