Python中如何提取PDF文件里表格的信息?

如何提取一个 pdf 文件里面, 一个表格的信息?

我有一个 pdf 文件, 里面的有一个类似这样的表格, 除了这个表格还有其他很多没有写在表格里面的文字,

我现在想做的就是提取这个表格里里面的信息, 这个怎么做?

我湿了 pdfminer, 里面提取的文字顺序尤其是在提取表格内容的时候, 或者在表格里面有换行的情况的时候, 变得很乱无法统一提取信息。请问有没有什么好点的方法?

20180423164856


Python中如何提取PDF文件里表格的信息?

19 回复

理论上 PDF 里面没有表格的概念,只有线、框、文字,所以你可能要计算坐标去判断一个字是否在表格中。


tabula-pycamelot库来提取PDF表格最直接。tabula-py基于Java的Tabula,适合简单表格;camelot更擅长处理复杂线框。

1. 使用tabula-py提取:

import tabula

# 读取PDF中所有表格
tables = tabula.read_pdf('your_file.pdf', pages='all', multiple_tables=True)

# 将提取的表格保存为CSV
tabula.convert_into('your_file.pdf', 'output.csv', output_format='csv', pages='all')

2. 使用camelot提取(对复杂表格效果更好):

import camelot

# 用stream模式提取(无线框表格)
tables = camelot.read_pdf('your_file.pdf', flavor='stream', pages='1-3')

# 用lattice模式提取(有线框表格)
tables = camelot.read_pdf('your_file.pdf', flavor='lattice')

# 查看提取结果
print(tables[0].df)

# 导出所有表格到Excel
tables.export('output.xlsx', f='excel')

关键点:

  • 安装时注意:tabula-py需要Java环境,camelot需要ghostscripttk
  • 带明显边框的表格用lattice模式,无边框或间距不规则的用stream模式
  • 可以先提取一页测试效果再批量处理

简单总结:简单表格用tabula,复杂表格用camelot。

ocr 识别了解一下

最近也要做这么个需求,表格比你这还复杂~ pdfminer 看了下还没试~感觉 ocr 也有局限~ 还在搜索资料…

OCR 肯定不行, pdfminer 不行, pdfminer 是无格式的, 无法探知一个字段是不是在表格里面, 我看一楼哥们的方法应该是比较有效的, 只是感觉有点难。。。

我刚看了一下 pdftable, 里面示例都用不了。。。

读文件的函数感觉都没写完。

http://7xpvdr.com1.z0.glb.clouddn.com/95885595-9dc8-4753-9ab1-e023daa27bef0423171652.png

用 Word 打开这个 PDF 就行了。

word 打开 pdf 一般就是一张大图

如果是 doc 之类的富文本格式转换的 PDF 可以试试在 Acrobat 里写 JavaScript 提取一些信息

pdftotext 之后自己在做处理, 直接识别 table,难

手工敲吧,比找工具快多了 这种表格基本上无解

目前能够直接读取 Pdf 里面表格的应该就只有 Fillable Pdf 了。
里面可以添加 fields 并通过 field.Value 这种方式获取其中的值。

https://www.freepdfconvert.com/zh-hans/pdf-excel 这个网站不错,前天做报价用了很方便转换了。只不过没有付钱有页数转换的限制。

角点检测

白描 了解一下

不介意的话 acrobat 直接转 doc,或者用 reader 一纵列一纵列的选择复制

截图 OCR 呗

项目还没有开源啊……



用 pdfminer 是可以做的,把线识别出来,然后自己组装成表格。另外有一个叫做 tabula-py 的项目了解一下

附参考资料:

- http://www.degeneratestate.org/posts/2016/Jun/15/extracting-tabular-data-from-pdfs/

- https://github.com/chezou/tabula-py

白描 现在表格识别有了质的提升,可以尝试一下

回到顶部