Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比
pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的。
一、pdfminer3k
pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本。
网上有很多 pdfminer3k 的代码示例,看过以后,只想吐槽一下,太复杂了,有违 python 的简洁。
pdfminer 对于表格的处理非常的不友好,能提取出文字,但是没有格式:
pdf表格截图:
代码运行结果:
想把这个结果还原成表格可不容易,加的规则太多必然导致通用性的下降。
二、tabula-py
tabula 是专门用来提取PDF表格数据的,同时支持PDF导出为CSV、Excel格式,但是这工具是用 java 写的,依赖 java7/8。tabula-py 就是对它做了一层 python 的封装,所以也依赖 java7/8。
代码很简单:
虽然号称是专业处理 pdf 中的表格的,但实际效果也不咋地。还是 pdfminer 中使用的 pdf,运行结果如下:
这结果真的很尴尬啊,表头识别就错了,还有 pdf 中有两张表,我没发现怎么区分表。
三、pdfplumber
pdfplumber 是按页来处理 pdf 的,可以获得页面的所有文字,并且提供的单独的方法用于提取表格。
得到的 table 是个 string 类型的二维数组,这里为了跟 tabula 比较,按行输出显示。
可以看到,跟 tabula 相比,首先是可以区分表格,其次,准确率也提高了很多,表头的识别完全正确。对于表格中有换行的,识别还不是很正确,但至少列的划分没问题,所以还是能处理的。
经过处理后,运行得到结果:
这结果已经完全正确了,而用 tabula,即便是经过处理也是无法得到这样的结果的。当然对于不同的 pdf,可能需要不同的处理,实际情况还是要自己分析。
pdfplumber 也有处理不准确的时候,主要表现在缺列:
我找了另一个 pdf,表格部分截图如下:
解析结果如下:
4列变成了两列,另外,如果表格有合并单元格的情况,也会有这种问题,我挑这个表格展示是因为比较特殊,没有合并单元格也缺列了。这应该跟 pdf 生成的时候有关。
但其实数据是获取完整的,并没有丢,只是被认为是非表格了。输出 page.extract_text() 如下:
然后,我又用 tabula 试了下,结果如下:
列是齐了,但是,表头呢???
pdfplumber 还提供了图形Debug功能,可以获得PDF页面的截图,并且用方框框起识别到的文字或表格,帮助判断PDF的识别情况,并且进行配置的调整。要使用这个功能,还需要安装ImageMagick。因为没有用到,所以暂时没有去细究。
四、后记
我们在做爬虫的时候,难免会遇到 pdf 需要解析,主要还是针对文本和表格的数据提取。而 python 处理 pdf 的库实在是太多太多了,比如还有 pypdf2,网上资料也比较多,但是我试了,读出来是乱码,没有仔细的读源码所以这个问题也没有解决。
而我对比较常用的3个库比较后觉得,还是 pdfplumber 比较好用,对表格的支持最好。
Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比相关推荐
- python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍
Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...
- python读取pdf表格_【Python 库】解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比...
pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...
- Python解析PDF文本
基本操作 #pdfplumber对表格的处理能力强于pdfminer import pdfplumber import repath = r'E:\py_shiyan\Pycharm备份\Financ ...
- 用python 将PDF中的表格转化为Excel
这几天想统计一下<中国人文社会科学期刊 AMI 综合评价报告(2018 年):A 刊评价报告>中的期刊,但是只找到了该报告的PDF版,对于表格的编辑不太方便,于是想到用Python将表格转 ...
- io python 读取pdf_python自动化办公之 Python 解析 PDF
上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...
- python interpreter 中没有torch_python自动化办公之 Python 解析 PDF
上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...
- python解析pdf文件
加载pdf文件,获取pdf的每一页对象: import pdfplumber path = "" with pdfplumber.open(path) as pdf_obj:pag ...
- Python提取pdf中的表格数据(附实战案例)
14天阅读挑战赛 今天给大家介绍一个Python使用工具,那就是从pdf文件中读取表格数据,主要用到第三方库 pdfplumber. pdfplumber简介 pdfplumber是一款基于pdfmi ...
- python解析pdf,读取文字,可识别两栏pdf等
python解析pdf,读取文字,可识别两栏pdf等 一.解析我们的pdf文件,首先第一步是解析普通类别的pdf(只有一栏) 代码中包含注释(不懂得可以留言) 二.处理拥有两栏等类型的pdf 为什么要 ...
最新文章
- 8500WN流畅高速上网高端卡 12核心不锁倍频
- USB供电不足怎么办
- python 点计算角度
- 局域网***-Dos***CDP
- String中intern的方法
- T4生成实体和简单的CRUD操作
- 台式电脑桌面没有计算机,台式电脑开机后屏幕没显示怎么解决?
- matlab 三维绘图 抛光,瓷砖抛光过程建模与仿真
- 分布式计算solutions
- WinXP IIS配置
- 浅谈数据迁移测试(转载)
- java如何看手机型号,基于JAVA代码 获取手机基本信息(本机号码,SDK版本,系统版本,手机型号)...
- 版本号命名规范及原则
- Fedora9下编译内核
- 有赞前端SP毁约后的日子
- 前端埋点pv,uv以及实现思路
- [转贴]当杀毒软件无能为力时,手动杀毒也许是我的最后救命稻草!
- 摄像头识别黑烟加框处理(测试)
- 中文核心期刊目录汇总(2020年12月发布)
- GSM模块联网 GPRS上传物联网云平台调试笔记
热门文章
- 1、常用激活函数:Sigmoid、Tanh、ReLU、LReLU、RReLU、ELU
- DC-005电源插座有三个引脚分别要怎么接?
- sharepoint 2016 学习系列篇(15)-自定义列表应用篇-(4)数据权限配置
- 于无声处听惊雷---惊醒
- ISSP使用详细步骤
- 计算两个年份之间的闰年
- 枚举法|Old Bill
- Laravel8 使用 RabbitMQ
- R语言使用rnorm函数生成正太分布的随机数、使用plot函数和density函数可视化正太分布的随机数对应的密度图(Normal distribution)
- 全新概念的国际学习平台诞生了