上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片,在一张白纸上把内容摆放在固定的位置上,没有逻辑结构。不过还是那句话,可以先了解下都能实现什么功能,以备不时之需。

正是因为 PDF 没有统一的规范,也没有逻辑结构,比如句子或段落,并且不能自适应页面大小的调整。今天要介绍的 PDFMiner 尝试通过猜测它们的布局来重建它们的结构,但是并不能保证一定能识别成功,尤其是对图片和表格的识别处理会差一些。

安装 PDFMiner

解析 PDF 需要用到 pdfminer 库,目前最新版本只支持 Python3.6 及以上 ,执行如下安装命令:

$ pip3 install pdfminer

################# 运行结果 ################

Collecting pdfminerDownloading https://files.pythonhosted.org/packages/71/a3/155c5cde5f9c0b1069043b2946a93f54a41fd72cc19c6c100f6f2f5bdc15/pdfminer-20191125.tar.gz (4.2MB)|████████████████████████████████| 4.2MB 2.8MB/s
Collecting pycryptodome (from pdfminer)Downloading https://files.pythonhosted.org/packages/cc/a6/f7e09ad45296eff20bd1db5aa14b1c9ea06826dd68eb2a7a27572c71d581/pycryptodome-3.9.4-cp37-cp37m-macosx_10_6_intel.whl (10.1MB)|████████████████████████████████| 10.1MB 1.6MB/s
Building wheels for collected packages: pdfminerBuilding wheel for pdfminer (setup.py) ... doneStored in directory: /Users/mjg/Library/Caches/pip/wheels/e1/00/af/720a55d74ba3615bb4709a3ded6dd71dc5370a586a0ff6f326
Successfully built pdfminer
Installing collected packages: pycryptodome, pdfminer
Successfully installed pdfminer-20191125 pycryptodome-3.9.4

OK,如果提示以上信息则安装成功。

解析概述

由于PDF文件有如此大和复杂的结构,完整解析 PDF 文件很费时费力的。因此 PDFMiner 采用了一个懒惰分析的策略,就是只分析你所需要的部分。换句话就是说,根据你自己的需要只解释出你要的那部分就可以了。这里有两个核心类是必须的 PDFParser 和 PDFDocument,除了这两个模块还有以下几个模块来配合使用。

模块名

说明

下面这个图表示了 PDFMiner 各模块之间的关系,让我们能有个基本的认识:

基本用法

首先我准备了一个 pdf 格式的文档,内容基本如下图这样:

下面这段代码给出了 PDFMiner 解析 PDF 文档的基本方法,首先打开 pdf 文件,创建解析对象,存储文档结构,创建资源管理对象以及共享资源,然后再创建 device 对象,最后再创建文档解析对象,并处理文档中的每一页。是不是看起来很复杂,不过确实也挺麻烦,还是让我们直接看代码吧。

# pdf_1.py# 导入库
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator# 设置文档密码
password = ''#打开pdf文件
fp = open('pdfminer.pdf','rb')#从文件句柄创建一个pdf解析对象
parser = PDFParser(fp)#创建pdf文档对象,存储文档结构
document = PDFDocument(parser,password)#创建一个pdf资源管理对象,存储共享资源
rsrcmgr = PDFResourceManager()#创建一个device对象
device = PDFDevice(rsrcmgr)#创建一个解释对象
interpreter = PDFPageInterpreter(rsrcmgr, device)#处理包含在文档中的每一页
for page in PDFPage.create_pages(document):interpreter.process_page(page)

这样就完成了将页面对象加载的操作,下面通过命令 python pdf_1.py 运行程序,没有报错就说明页面信息已经成功加载至内存,然后我们就得想办法分别解析各类型信息,那都有哪些类型的对象呢?

解析对象

布局分析器把 pdf 文档中每一页返回为一个 LTPage 对象. 该对象包含该页面中的所有子对象,它们之间的关系大概如下图所示:

接下来我再列出一个表格具体说明下各对象:

好了,了解以上对象都表示什么以后,现在我们写一段代码解析一个 pdf 并打印出来所解析的内容。

# pdf_2.py# 导入库
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.layout import *
from pdfminer.converter import PDFPageAggregator# 提供初始密码
password = ''
# 没有密码可以初始密码
# document.initialize()#打开pdf文件
fp = open('pdfminer.pdf','rb')#从文件句柄创建一个pdf解析对象
parser = PDFParser(fp)#创建pdf文档对象,存储文档结构
document = PDFDocument(parser, password)#创建一个pdf资源管理对象,存储共享资源
rsrcmgr = PDFResourceManager()laparams = LAParams()#创建一个device对象
device = PDFPageAggregator(rsrcmgr, laparams=laparams)#创建一个解释对象
interpreter = PDFPageInterpreter(rsrcmgr, device)#处理包含在文档中的每一页
for page in PDFPage.create_pages(document):interpreter.process_page(page)layout = device.get_result()for x in layout:# 获取文本对象if isinstance(x, LTTextBox):print(x.get_text().strip())# 获取图片对象if isinstance(x,LTImage):print('这里获取到一张图片')# 获取 figure 对象if isinstance(x,LTFigure):print('这里获取到一个 figure 对象')

OK,这次我们把 pdf 文件加载到内存后,循环加载到每个页面对象,并遍历各个对象,使用 isinstance 方法判断对象的类型,将文本对象时直接打印出来,当为其他对象时打印一个字符串,返回结果如下图:

可以看出 PDFMiner 对文本的解析还是不错的,不过对图片的解析,正如官方文档所说,识别并不是很准确,这里将图片识别为了 figure 对象。另外对于表格的支持也不够好,虽然能读取出来表格内容,但完全看不出表格的样式来,后期还需要进一步处理。

总结

本文为大家介绍了 Python 中如何解析 PDF 文档,由于 PDF 并没有规范的格式,解析起来会比较复杂。当然除了 PDFMiner ,还有很多处理 pdf 的工具,各有优缺点,今天算是带大家入个门,就以 PDFMiner 为例做了一个简单介绍,如果想了解更多请参考文末官网介绍。

参考

python-pdfminer 官网:https://euske.github.io/pdfminer/

Python PDF Parser:https://github.com/euske/pdfminer

本文转自网络

欢迎查看个人网站:

懒人找资源-知识应当自由平等地流向每一个人​lazymovie.me

python interpreter 中没有torch_python自动化办公之 Python 解析 PDF相关推荐

  1. lisp对excel其他行列写入_【极简Python 自动化办公】Python写入Excel表格

    [极简Python 自动化办公]Python写入Excel表格 [极简Python 自动化办公]专栏是介绍如何利用python办公,减少工作负荷.篇幅精炼,内容易懂,无论是否有编程基础,都非常适合. ...

  2. python做excel自动化-Python如何控制Excel实现自动化办公

    Python如何控制Excel实现自动化办公 发布时间:2020-04-07 09:51:44 来源:亿速云 阅读:132 作者:小新 这篇文章主要给大家讲解的是Python如何控制Excel实现自动 ...

  3. 如何在Python Interpreter中重新导入更新的包? [重复]

    本文翻译自:How to re import an updated package while in Python Interpreter? [duplicate] This question alr ...

  4. python interpreter 中没有torch_PyTorch扩展自定义PyThon/C++(CUDA)算子的若干方法总结

    在做毕设的时候需要实现一个PyTorch原生代码中没有的并行算子,所以用到了这部分的知识,再不总结就要忘光了= =,本文内容主要是PyTorch的官方教程的各种传送门,这些官方教程写的都很好,以后就可 ...

  5. 怎么学习python自动化_会python基础,如何学习自动化办公?

    这个我会! 我也是在有了点python基础之后开始学习自动化办公的,毕竟有时候要处理的表格太烦人了,重复的操作太多,所以我也想到了学习使用python来进行自动化办公. 说到自动化办公.无非就是对一些 ...

  6. python教程400集笔记,Python学习中的笔记--集合相关,python笔记--集合

    Python学习中的笔记--集合相关,python笔记--集合 集合的基本操作 一.可修改的集合set 创建集合 var = set() var = {'a','b','c','d'} 成员检测 va ...

  7. python自动化办公兼职-python自动化办公?学这些就够用了

    知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手? python在自动化办公领域越来越受欢迎,批量处 ...

  8. python自动化办公 书籍-python自动化办公知识点整理汇总

    知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理 ...

  9. python 合并word文件_python自动化办公(1)—— 批量合并word文档

    上个月领导交给我一个非常紧急的任务,限我2天之内完成.其中有一项是将项目两年内的分析报告汇总到一篇报告中.这些报告分散在不同的目录下,而且数量也非常多. 我花了30分钟左右梳理了一下这些分析报告,竟然 ...

最新文章

  1. 速成班出来的AI人才,老板到底要不要?6位导师告诉你行业真相
  2. 语音识别1: 音频信号采集、并存入 wav文件
  3. 深度学习在医学影像的三大类项目应用
  4. 判断字符为空_49. 把字符串转换成整数(剑指offer)
  5. C#实现RSA加密和解密详解
  6. C# DataTable的Distinct解决方案及表的复制
  7. 深入分析同步工具类之AbstractQueuedSynchronizer
  8. 如何反编译微信小程序前端,30分钟教你学会
  9. 用python实现关机程序_python实现重启关机程序
  10. wg运行内存装MySQL8_搭建Mysql-proxy实现主从同步读写分离
  11. ps2017 cc 打印排版一寸照片
  12. mysql先过滤后分组_MySQL分组过滤
  13. 未来计算机畅想英语作文,畅想未来的生活life in the future
  14. 修复液晶显示器屏幕上的划痕
  15. 2022年外贸公司邮箱签名怎么设置?
  16. 区块链:Casper 机制的历史起源:第一篇
  17. 第四章——确定性推理
  18. 2018-2019-2 20175227张雪莹 《Java程序设计》 实验一 Java开发环境的熟悉
  19. 排查线上问题的9种方式
  20. 微信扫描二维码跳转页面

热门文章

  1. JavaScript DOM元素 增加 删除
  2. 网易Airtest安装
  3. react 的样式写法
  4. AE二次开发-获取图层的属性表
  5. 杜比dss200服务器系统升级包434,杜比数字影院系统DSS200软件升级指南(初稿).pdf
  6. 物联网专业本科毕业论文选题
  7. 胡爱玲医生论中医治疗荨麻疹的优势和理念
  8. python短信验证码登录_玩转python之获取短信验证码
  9. 如何用计算机放音乐,教你如何用iPhone远程遥控电脑播放音乐教程
  10. win2003 由于可用空间计算失败_幼儿编程启蒙怎么做?智能家居+ai 玩空间是最佳教具...