python解析PDF程序代码
作者:酸奶面包 发布时间:2021-05-17 03:16:55
标签: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)
来源:https://www.cnblogs.com/suanai/p/14902360.html


猜你喜欢
- 开门见山,直接使用 skimage 库为图像添加高斯噪声是很简单的:import skimageorigin = skimage.io.im
- 实现步骤:图像灰度化边缘检测根据Canny检测得出来的Mat寻找轮廓算出最大轮廓周长or面积根据获取到的最大轮廓下标进行轮廓绘制画出最大矩形
- 前段时间公司数据库服务器崩溃启动不起来,经过我初步排查是/home目录挂载不上导致启动不起来,虽然通过注释/etc/fstab中的挂载信息,
- 1 问题描述最近与诸位聊起,在用户体验网站产品、完成任务的过程中,页面的切换到底是新开窗口,还是当前页面跳转,哪一种是最佳的用户体验。这一讨
- 阅读上一篇:WEB前端开发经验总结 ⅠWEB标准篇现在我们接着来讲怎么在实际开发中结合我前面所讲的理论来开发制作页面吧。现在就来看看我们要制
- 乱码问题破解压缩包时候会存在中文乱码问题!1:直接使用Everything搜索出要修改的库文件 zipfile.py ,并用notepad+
- 我就废话不多说了,还是直接看代码吧!# -*- coding:utf-8 -*-#面试题,写一个方法,将一行字符串中所有的单词数量统计出来c
- 本文实例为大家分享了python画条形图的具体代码,供大家参考,具体内容如下在做毕设的过程中有些数据用表格来展现,会很难看出数据之间的差别,
- 在将string类型的数据类型转换为spark rdd时,一直报这个错,StructType can not accept object %
- 鉴于最近一段时间一直在折腾的CNN网络效果不太理想,主要目标是为了检测出图像中的一些关键点,可以参考人脸的关键点检测算法。但是由于从数据集的
- 【问题描述】我们生产环境有一组集群的多台MySQL服务器(MySQL 5.6.21),不定期的会crash,但error log中只记录了重
- 前言很多时候在windows下压缩文件没问题,但是到了Linux下,出现乱码,很常见。以前在Ubuntu下,用`unzip -O GBK f
- 如下所示:import h5pyimport numpy as np#HDF5的写入:imgData = np.zeros((2,4))f
- PHP生成桌面快捷方式就是这么的简单,大家生成的时候改下你要生成的网站即可。dianji.html代码:<a href="a
- PHP Too few arguments to function的解决过去自定义函数的时候如果参数不足,则会抛出一个警告,但是在7.1开始
- asp之家注:学习javascript(js),免不了要用到打开新窗口,方法很多,总的来说是使用window.open。不同与HTML中的t
- 示例: 创建Table CREATE TABLE [dbo].[xmlTable]( [id] [int] IDENTITY(1,1) NO
- 前言接着上一篇:AI识别照片是谁,人脸识别face_recognition开源项目安装使用根据项目提供的demo代码,调整了一下功能,自己写
- 本文实例讲述了python解析xml的方法。分享给大家供大家参考,具体如下:xml是除了json之外另外一个比较常用的用来做为数据交换的载体
- 前言在使用echarts绘图时可能遇到一些特别的需求,如,当x周表示日期且数据较多(如三个月,按天统计),此时如果按照echarts的默认配