从PDF文件中提取/识别表格 Python

51

是否有任何开源库支持表格识别和提取?

我的意思是:

  1. 判断表格结构是否存在
  2. 从其内容中对表格进行分类
  3. 以有用的输出格式(如JSON / CSV等)提取表格数据

我查看了关于这个主题的类似问题,并找到了以下内容:

  • PDFMiner 解决了第三个问题,但似乎用户需要为每个表格指定PDFMiner中表格结构的位置(如果我错了,请纠正我)
  • pdf-table-extract 尝试解决第一个问题,但根据待办事项清单,目前无法识别由空格分隔的表格。这是一个问题,因为我PDF中的所有表格都由空格分隔!

目前,我认为我需要花很多时间开发机器学习解决方案来从PDF中识别表格结构。因此,任何其他方法都将不胜感激!


5
如果您可以使用Python以外的工具,您可能想要看一下tabula - mkl
谢谢。我一定会研究这个。然而,我很想在Python中找到一个解决方案,因为Python的编写速度非常快。 - Alexander McFarlane
@Alexander McFarlane:在https://dev59.com/l7Pma4cB1Zd3GeqPurO2#72414309的1个答案中尝试使用SLICEmyPDF。 - 123456
请查看https://dev59.com/7nTYa4cB1Zd3GeqPtlYC。 - Martin Thoma
3个回答

49

在探索OCR库、边界框和聚类算法多个小时后,我找到了一个如此简单的解决方案,以至于让你想哭!

我希望你正在使用Linux;

pdftotext -layout NAME_OF_PDF.pdf

真是太棒了!

现在你有了一个漂亮的文本文件,所有信息都排成漂亮的列,现在将其格式化为CSV等是微不足道的。

正是因为像这样的时刻,我爱上了Linux。这些家伙为一切问题想出了令人惊叹的解决方案,并免费提供给大家!


4
我能在Windows 10上使用pdftotext。只需下载 Windows 版的 XPDFTools 即可。 - avg
@avg 今天刚回来处理这个问题... 基本上我是通过 pdftotext 生成的文本文件,将其拆分为字符串列表(每行一个字符串),使用 csv.DictWriter() 创建字段名称集合,然后循环遍历每一行,将其切片为所需的字段,然后将这些字段反馈给 DictWriter。希望对你有帮助。 https://gist.github.com/memilanuk/c6e0bb9f98076a172d4f39d044ed6ecf - memilanuk
这个库是为Python 2.x版本编写的,不支持Python 3.x。 - Laveena

41

2
这只是一个关于这个答案有效性的更新...去年我使用tabula破解了一个解决方案,用于迭代处理大约100个具有共同格式的PDF文件。虽然不太美观,但它是最好的办法,也节省了大量时间。 - Alexander McFarlane
https://pypi.python.org/pypi/pdftable 能够满足需求吗? - N M
它只能在基于文本的PDF上工作,而不能在图像上工作。是否有类似的工具可以从PDF图像中提取数据? - Sundeep Pidugu
@Sundeep:当然,它只能在基于文本的PDF上运行。如果您想从图像中提取表格,则必须首先尝试在图像上运行OCR(光学字符识别)过程,然后再对文本应用表格提取。最终结果的质量很大程度上取决于OCR步骤的成功。没有任何东西能够直接从仅包含图像的PDF中提取表格(或文本)。 - Kurt Pfeifle
我正在寻找可以做到这一点的工具,顺便感谢@KurtPfeifle提供的信息。 - Sundeep Pidugu
@Sundeep:你可以开始查看这里提到的工具:https://stackoverflow.com/questions/tagged/ocr - Kurt Pfeifle

18

我想补充一下 Kurt Pfeifle 给出的非常有用的答案 - 现在有一个Python封装程序可以使用Tabula,目前看来效果非常不错:https://github.com/chezou/tabula-py

这将把您的PDF表格转换为Pandas数据框架。您还可以设置x、y坐标系中的区域,这对于非规则数据显然非常方便。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接