【问题标题】:PDF table extractionPDF表格提取
【发布时间】:2012-05-05 06:13:36
【问题描述】:

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

PDF

  • PDFBox || iText (Java)
  • Google 文档导入
  • PDF2HTML || PDF2表格

GIF

  • Tesseract-OCR

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

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

【问题讨论】:

  • PDF->文本很少直截了当。 PDF 是一种文档布局语言,而不是一种标记语言。根据pdf生成器当天的心情,它每次可以生成完全不同的文档。
  • 我明白了。唯一困扰我的是一些 pdf 到 xls 的解析器工作得很好。那么为什么没有任何开源项目也能够可靠地解析 pdf 表呢?
  • 如果您可以联系编写此菜单的人,请查看其生成的格式。他们可能会以更容易从中提取文本的格式创建它。
  • 这也是我在考虑的一个选项,但它有两个问题:1. 大学喜欢隐藏他们的信息,只有在他们想要的时候才可以访问;2. 我也在想找到一种适用于更多自助餐厅的方法,而不是我的意思;)我将继续我的“试错”方法!
  • 示例 pdf 位于 goo.gl/xc8r3。 @njzk2:我为什么要忘记 OCR?

标签: pdf pdfbox extraction


【解决方案1】:

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

【讨论】:

  • 同意,到目前为止我所看到的准确性非常出色(它提到表头仍然可能有问题,但到目前为止我没有遇到任何问题)。我只是希望有一个 API...
  • 哦,有。 Tabula 的引擎是 tabula-extractor,你可以在这里得到它:github.com/jazzido/tabula-extractor - 它是用 jruby 编写的,你需要它,但说明很简单。
  • 更新的工具列表:okfnlabs.org/blog/2016/04/19/…
【解决方案2】:

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

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

  1. 输入文件:sample-1.pdf,结果:sample-1.html
  2. 输入文件:sample-4.pdf,结果:sample-4.html

访问我的项目页面traprange

或者我的文章traprange

【讨论】:

  • 这个项目做得很好!您可能需要考虑添加对边界线分析的支持以分隔行和列,而不仅仅是按距离
【解决方案3】:

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

您可以使用以下代码 sn-p 继续您的任务:

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

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

【讨论】:

    【解决方案4】:

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

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

    免责声明:我为 ByteScout 工作

    【讨论】:

    • 这个软件很棒,但王子,对于一个 1 美元 1 几乎是 4 的人来说,不是那么多。:(
    • @jack pdf 实用程序(PDF Multitool)是完全免费的,您是说 PDF Extractor SDK 吗?
    • 我刚刚测试了转换为 HTML 的选项,这是迄今为止我找到的最好的软件。你在这个软件上工作过吗?我想在软件中使用该提取物,所以是的,我的意思是 SDK。
    • @jack 有办法私信你吗?
    • 当然,你可以通过谷歌邮件服务器的 jackj33 给我发电子邮件
    【解决方案5】:

    我已经尝试过许多 OCR 和文本转换器软件,尽管我认为应该编写一次将 PDF 转换为文本的程序,因为执行任务的人可以更好地理解图像。

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

    【讨论】:

    • 文本识别本身的能力是对的。 PDF2HTML 提供了相当好的结果,但它仍然无法处理 pdf 文档中的表格 - 它只是无法识别它们的存在。不过,我正在寻找一种“工具”,它还可以检测表格并将它们(连同其中的信息)转换为 HTML 或 XML 等数据。
    • 没有人,世界上没有人可以将 ocr/图像提取到 html 表或任何其他东西。表格不用于显示文本,如果表格有边框,那么它可能是可能的,但非常困难。一个人必须处理两件事 OCR 和 PDF。没有什么是不可能的,但非常困难。必须首先从ocr中提取文本的每个位置的文本,然后将它们标记为PDF。尝试使用 PS(ghost-script)制作,因为许多打印技术都使用它们。首先将您的 gif 图像更改为 PS,然后再更改为 PDF 可能会给出正确答案
    【解决方案6】:

    对于主要模板 Tabula 是开源的最佳选择,而 Abbyy PDF 编辑器是企业级 pdf 数据提取和修改的绝佳解决方案。 Abbyy 从事 OCR 工作。

    Tabula 有两个选项用于自动表格检测,另一个是手动提供坐标。

    【讨论】:

    • 虽然你的两个答案可能是正确的。您应该发布一些链接以鼓励研究;)。另外我认为@Vilius 的问题是一个概念性的问题。我认为将 PDF/PNG/GIF 中的数据提取为纯文本会更容易。有了它,你就可以从中创建一个 HTML/XML...但是引擎会更好,因为它的范围/责任性较低。
    【解决方案7】:

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

    如果您无法对框的大小进行硬编码(或者想将问题应用于不同格式的多个菜单),那么对我来说显而易见的方法(我说的是显而易见的,不容易)将是边缘检测找到表格的边界在哪里,然后应用我之前谈到的拆分。

    【讨论】:

    • 硬编码方法不适用于我的情况。由于每周都有新的菜单和不同的餐量,表格结构的表格单元格的大小会有所不同......在阅读了更多关于 SO 和谷歌的东西之后,我实际上找到了一种检测“数据”的方法” 在图像中:霍夫变换。它仍然不完全符合我的要求
    • @Vilius 为什么转换不能完全“符合 [您的] 要求”?
    • 由于有不同种类的菜单,我可能需要硬编码很多东西,但我想让它更通用。所以霍夫变换就足够了,但效率不够。
    【解决方案8】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多