admin 管理员组文章数量: 1086019
2024年12月29日发(作者:mongodb数据库的优势)
Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的
表现来看,它更像是一张图片,在一张白纸上把内容摆放在固定的位置
上,没有逻辑结构。不过还是那句话,可以先了解下都能实现什么功
能,以备不时之需。正是因为 PDF 没有统一的规范,也没有逻辑结
构,比如句子或段落,并且不能自适应页面大小的调整。今天要介绍的
PDFMiner 尝试通过猜测它们的布局来重建它们的结构,但是并不能保
证一定能识别成功,尤其是对图片和表格的识别处理会差一些。
安装 PDFMiner
解析 PDF 需要用到 pdfminer 库,目前最新版本只支持 Python3.6
及以上 ,执行如下安装命令:
OK,如果提示以上信息则安装成功。
解析概述
由于PDF文件有如此大和复杂的结构,完整解析 PDF 文件很费时
费力的。因此 PDFMiner 采用了一个懒惰分析的策略,就是只分析你所
需要的部分。换句话就是说,根据你自己的需要只解释出你要的那部分
就可以了。这里有两个核心类是必须
的 PDFParser 和 PDFDocument,除了这两个模块还有以下几个模块
来配合使用。
模块名
PDFParser
PDFDocument
PDFPageInterpreter
PDFDevice
PDFResourceManager
说明
从文件中获取数据
存储文档数据结构到内存中
解析page内容
把解析到的内容转化为你需要的东西
存储共享资源,例如字体或图片等
下面这个图表示了 PDFMiner 各模块之间的关系,让我们能有个基本的
认识:
基本用法
首先我准备了一个 pdf 格式的文档,内容基本如下图这样:
下面这段代码给出了 PDFMiner 解析 PDF 文档的基本方法,首先打
开 pdf 文件,创建解析对象,存储文档结构,创建资源管理对象以及共
享资源,然后再创建 device 对象,最后再创建文档解析对象,并处理文
档中的每一页。是不是看起来很复杂,不过确实也挺麻烦,还是让我们直
接看代码吧。
这样就完成了将页面对象加载的操作,下面通过命令 python
pdf_ 运行程序,没有报错就说明页面信息已经成功加载至内存,
然后我们就得想办法分别解析各类型信息,那都有哪些类型的对象呢?
解析对象
布局分析器把 pdf 文档中每一页返回为一个 LTPage 对象. 该
对象包含该页面中的所有子对象,它们之间的关系大概如下图所示:
接下来我再列出一个表格具体说明下各对象:
对象
名
LTPa
ge
LTTe
xtBo
x
LTTe
xtLi
ne
LTCh
ar
LTAn
no
LTFi
gure
LTIm
age
LTLi
ne
LTRe
ct
LTCu
rve
对象说明
代表一个完整的页面,可以
包含子对象
它包含 LTTextLine 对象的
列表,代表一组被包含在矩
形区域中的文本
包含一个LTChar对象的列
表,表现为单行文本
表示一个在文本中的真实的
字母,作为一个unicode字
符串
表示一个在文本中的真实的
字母,作为一个unicode字
符串
表示一个被 PDF Form 对象
使用的区域
表示一个图形对象,可以是
JPEG或者其他格式
表示一根直线
表示一个矩形
代表一个贝塞尔曲线
备注
例如:LTTextBox,LTFigure,LTImage,LTRec
t,LTCurve和LTLine
注意:该box是根据几何学分析得到的,并
不一定准确地表现为该文本的逻辑范围,get
_text()方法可以返回文本内容
字符表现为一行或一列,取决于文本书写方
式,get_text()方法返回文本内容
LTChar 对象有真实的分隔符
LTAnno 对象没有,是虚拟分隔符,按照两个
字符之间的关系,布局分析器插入虚拟分隔
符
pdf form适用于目前的图表(present figur
es)或者页面中植入的另一个pdf文档图片,
LTFigure对象可以递归
但 PDFMiner 目前没有花太多精力在图形对
象上
用来分割文本或图表(figures)
用来框住别的图片或者图表
好了,了解以上对象都表示什么以后,现在我们写一段代码解析一个
pdf 并打印出来所解析的内容。
OK,这次我们把 pdf 文件加载到内存后,循环加载到每个页面对象,并
遍历各个对象,使用 isinstance 方法判断对象的类型,将文本对象时
直接打印出来,当为其他对象时打印一个字符串,返回结果如下图:
可以看出 PDFMiner 对文本的解析还是不错的,不过对图片的解析,正
如官方文档所说,识别并不是很准确,这里将图片识别为
了 figure 对象。另外对于表格的支持也不够好,虽然能读取出来表
格内容,但完全看不出表格的样式来,后期还需要进一步处理。
总结
本文为大家介绍了 Python 中如何解析 PDF 文档,由于 PDF 并没有
规范的格式,解析起来会比较复杂。当然除了 PDFMiner ,还有很多处
理 pdf 的工具,各有优缺点,今天算是带大家入个门,就以
为例做了一个简单介绍。
PDFMiner
版权声明:本文标题:Python 解析 PDF教程 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1735559606a1676945.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论