python解析PDF程序代码

 更新时间:2021年06月19日 11:24:14   作者:酸奶面包  
python解析pdf信息,目前还是不能做到很完善,每个方法都会有它的弊端,都需要结合自己的业务场景来和其它方法一块进行使用,从而达到一个相对满意的目标,接下来给大家介绍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的详细内容,更多关于python解析PDF的资料请关注脚本之家其它相关文章!

相关文章

  • python修改文件内容的3种方法详解

    python修改文件内容的3种方法详解

    这篇文章主要介绍了python修改文件内容的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 运行Python编写的程序方法实例

    运行Python编写的程序方法实例

    在本篇文章里小编给大家整理了关于运行Python编写的程序方法实例内容,有兴趣的朋友们可以学习下。
    2020-10-10
  • Python安装后测试连接MySQL数据库方式

    Python安装后测试连接MySQL数据库方式

    这篇文章主要介绍了Python安装后测试连接MySQL数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Python使用turtle绘制有趣的龙年祝福动画

    Python使用turtle绘制有趣的龙年祝福动画

    这篇文章主要介绍了Python的内置库——小海龟(turtle),它是一个非常实用的绘画工具,不仅可以帮助我们绘制图形,还能让我们查看整个绘画过程,下面我们就来看看如何使用turtle绘制有趣的龙年祝福动画吧
    2024-01-01
  • pandas分区间,算频率的实例

    pandas分区间,算频率的实例

    今天小编就为大家分享一篇pandas分区间,算频率的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 如何利用python制作时间戳转换工具详解

    如何利用python制作时间戳转换工具详解

    这篇文章主要给大家介绍了关于如何利用python制作时间戳转换工具的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • Python3常见函数range()用法详解

    Python3常见函数range()用法详解

    “range函数是一个用来创建算数级数序列的通用函数,这篇文章主要介绍了Python3常见函数range()用法,需要的朋友可以参考下
    2019-12-12
  • python实现杨辉三角的几种方法代码实例

    python实现杨辉三角的几种方法代码实例

    这篇文章主要介绍了python实现杨辉三角的几种方法代码实例,文中图文代码讲解的很清晰,有不太懂的同学可以学习下
    2021-03-03
  • pandas按行按列遍历Dataframe的几种方式

    pandas按行按列遍历Dataframe的几种方式

    这篇文章主要介绍了pandas按行按列遍历Dataframe的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • python使用requests实现发送带文件请求功能

    python使用requests实现发送带文件请求功能

    这篇文章主要介绍了python使用requests实现发送带文件请求,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12

最新评论