PDF表格提取

时间:2012-04-24 15:10:40

标签: pdf pdfbox extraction

我有(相同)数据保存为GIF图像文件和PDF文件,我想将其解析为HTML或XML。这些数据实际上是我大学食堂的菜单。这意味着有一个新版本的文件必须每周解析! 通常,这些文件包含一些页眉和页脚文本,以及其间包含其他数据的表。 我已经阅读了有关stackoverflow的一些帖子,我也开始尝试将表数据解析为HTML / XML:

PDF

  • PDFBox || iText(Java)
  • Google文档导入
  • PDF2HTML || PDF2Table

GIF

  • 超正方体-OCR

我用PDFBox解析PDF文件得到了最好的结果,但仍然(因为菜单每周更改一次),它不够可靠。我收到的HTML有时会包含更多,有时更少的“段落”(<p>),因此我无法准确地解析数据。

这就是为什么我想知道是否有其他方法可以做到这一点?

8 个答案:

答案 0 :(得分:10)

Tabula是JRuby Web界面上一个非常好的开始,用于从任意PDF中提取CSV / TSV表。

答案 1 :(得分:8)

我已经实现了自己的算法(名称为traprange)来解析pdf文件中的表格数据。

以下是一些示例pdf文件和结果:

  1. 输入文件:sample-1.pdf,结果:sample-1.html
  2. 输入文件:sample-4.pdf,结果:sample-4.html
  3. 访问我的项目页面traprange

    或我在traprange

    的文章

答案 2 :(得分:3)

如果您希望每周一次从表中提取数据并且您在Windows上,请查看此免费软件pdf实用程序,其中包括自动表检测和表格到CSV,XML转换:PDF Viewer utility

该实用程序对于非开发人员的商业和非商业用途都是免费的(对于希望通过API自动化的开发人员,还有单独的版本。)

免责声明:我为ByteScout工作

答案 3 :(得分:2)

我已经尝试了许多OCR和文本转换器软件,虽然我相信曾经应该编写程序将PDF自动转换为文本,因为执行任务的人员可以更好地理解图像。

我还试图使用谷歌和其他许多公司的在线(约900个网站)和离线(约1000个软件)产品。如果您想从任何方法中提取文本,例如OCR或PDF格式的文本,那么我找到的最准确的程序是PDFTOHTMLPDFTOHTML的准确率约为98%,Google Online的准确率约为94%。这是一个非常好的软件,它还为您提供正确的文本格式,即文本的粗体,斜体等。

答案 4 :(得分:0)

桌子每次都在同一个地方吗?如果你能找到每个盒子的尺寸,你可以使用工具将PDF分割成多个文件,每个文件都包含一个盒子,之后你可以使用你想要的任何工具将每个较小的PDF转换为HTML(例如其他答案中提到的工具)。随机谷歌搜索提升了PyPdf,看起来它可能有一些有用的功能。

如果您无法硬编码盒子的大小(或者想要将问题应用于不同格式的多个菜单),对我来说明显的方法(我说明显,不容易)将是边缘检测到找到表格边框的位置,然后应用我之前谈过的分割。

答案 5 :(得分:0)

我最近遇到了类似的问题。

我发现的另一种解决方案是在Adobe中打开PDF文档并将其导出到xml。至少在我的PDF文件中它保留了表格信息,然后我能够以编程方式使用XML来生成表格文件,如excel等。

我遇到的另一个问题是,Adobe只允许您一次导出一个文件,而且我有很多文件。幸运的是Adobe也有一个合并功能。我最终将所有文件合并在一起,然后将它们导出为一个大的XML文件,并使用该文件生成我需要的文件。

答案 6 :(得分:0)

您可以使用Camelot从PDF中提取表格并将其导出到HTML文件。还支持CSV,Excel和JSON。您可以在http://camelot-py.readthedocs.io上查看文档。与其他开源表提取工具和库相比,它提供了更准确的结果。这是comparison

您可以使用以下代码段继续执行任务:

>>> import camelot
>>> tables = camelot.read_pdf('file.pdf')
>>> type(tables[0].df)
<class 'pandas.core.frame.DataFrame'>
>>> tables[0].to_html('file.html')

免责声明:我是图书馆的作者。

答案 7 :(得分:0)

用于主要模板的 Tabula 是开放源代码的最佳选择,而 Abbyy PDF 编辑器是用于企业级pdf数据提取和修改的出色解决方案。 Abbyy负责OCR。

Tabula有两个选项可以自动检测表格,另一个选项是通过提供坐标手动进行。