如何用Python从大量pdf 中提取表格中的数据进行分析?

利用Python下载了大量上市公司的年报,如果要从这些年报pdf中利用关键字抽取一些表格中的数据,有什么方法?试了pdfMiner,可以将pdf中的数…
关注者
457
被浏览
225,221
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

可以尝试使用一下 Camelot,是 Python 提取 PDF 表格的神器,github 地址为:

PDF 中的表格提取一般可以分为两种情形:

  • 有线框表格 :这种类型的表格必须有完整的线框,如下图所示:
有线框表格 1
有线框表格 2
  • 无线框表格 :可以有部分线框,或者没有线框,如下图所示:
无线框表格 1
无线框表格 2

有线框表格,解析时具有确定性,根据单元格之间的分割线即可完成表格的识别,使用 Camelot 提取时准确率非常高;无线框的表格,解析时具有不确定性,会根据文本左对齐、居中对齐、右对齐的方式以及文本坐标,猜测出 PDF 中可能是表格的区域,从而完成表格提取。

Camelot 使用起来非常简洁,只需简单的几行代码即可。

import camelot
tables = camelot.read_pdf("../data/basic_test.pdf ")    -- 读取 PDF 文件
print(tables[0].df)				        --  dataframe 格式输出提取的表格
tables[0].to_csv("../data/basic_test.csv ")	        -- 表格数据保存到 csv 文件	   


下面通过视频对 Camelot 做一个简单的介绍:

https://www.zhihu.com/video/1420865745097637888

实际解析 PDF 中的表格时,会碰到各种各样的问题,这时就需要对 Camelot 中的各个参数都有深入的了解,结合 Camelot 提供的可视化表格轮廓函数,进行微调,就可以解决较为复杂的 PDF 表格识别问题。

如通过设置参数,成功识别如下的 PDF 表格:


解析后的 Excel 数据:


感兴趣的话,推荐学习以下课程: