【问题标题】:How to extract data from a PDF file while keeping track of its structure?如何从 PDF 文件中提取数据,同时跟踪其结构?
【发布时间】:2010-10-30 14:00:29
【问题描述】:

我的目标是从 PDF 文件中提取文本和图像,同时解析其结构。解析结构的范围并不详尽;我只需要能够识别标题和段落。

我尝试了几种不同的方法,但都没有走得太远:

  • 将 PDF 转换为文本。它对我不起作用,因为我丢失了图像和文档的结构。
  • 将 PDF 转换为 HTML。我找到了一些可以帮助我解决这个问题的工具,迄今为止最好的工具是 pdftohtml。该工具在演示方面非常出色,但我无法成功解析 HTML。
  • 将 PDF 转换为 XML。同上。

有人对如何解决这个问题有任何建议吗?

【问题讨论】:

  • 为什么一直无法成功解析html?
  • 我想跟踪标题,其中一种方法是通过样式识别它们。一些标题的样式混合在一起,因此会产生一些问题。

标签: pdf parsing extraction


【解决方案1】:

本质上没有简单的剪切和粘贴解决方案,因为 PDF 对结构并不是很感兴趣。这个网站上还有许多其他答案会更详细地告诉你事情,但是这个应该给你要点:

If identifying text structure in PDF documents is so difficult, how do PDF readers do it so well?

如果您想在 PDF 本身中执行此操作(您将拥有对该过程的大部分控制权),您必须遍历页面上的所有文本并通过查看其文本属性(使用的字体、相对于页面上其他文本的大小等...)。

除此之外,您还必须通过查看文本片段的位置、页面上的空白、某些字母、单词和行的接近程度来识别段落...... PDF 本身甚至没有“单词”的概念,更不用说“行”或“段落”了。

更复杂的是,文本在页面上的绘制方式(以及它在 PDF 文件中出现的顺序)甚至不必是正确的阅读顺序(或者我们人类会考虑的顺序)是正确的阅读顺序)。

【讨论】:

    【解决方案2】:

    您可以将以下方法与 iTextSharp 或其他开源库一起使用:

    • 使用iTextSharp或类似的开源工具读取PDF文件并将所有文本对象收集到一个数组中(或使用pdftohtml之类的工具将PDF转换为HTML,然后解析HTML)
    • 按坐标对所有文本对象进行排序,以便将它们放在一起
    • 然后遍历对象并检查它们之间的距离,看看是否可以将 2 个或多个对象合并到一个段落中

    或者你可以使用像ByteScout PDF Extractor SDK这样的商业工具,它能够做到这一点:

    • 提取文本和图像并分析文本的布局
    • XML 或 CSV,其中文本对象在虚拟布局网格内合并或拆分为段落
    • 通过特殊 API 访问对象,从而可以通过其“虚拟”行和列索引来寻址每个对象,而不管它在原始 PDF 中的存储方式。

    免责声明:我隶属于 ByteScout

    【讨论】:

    • iTextSharp 不一定按照它在 PDF 中出现的顺序返回字符串输出。那么如何“按坐标对所有文本对象进行排序”?
    • @AbhishekPoojary 以这种方式,您应该转到低级 pdf 对象,按屏幕坐标对它们进行排序,然后将它们连接成最终字符串。由于 PDF 设计对象内部不需要与它们在屏幕上出现的顺序相同。
    【解决方案3】:

    PDF 解析标题及其子内容确实非常困难(这并不意味着它不可能),因为 PDF 有多种格式。但我最近遇到了一个名为 GROBID 的工具,它可以在这种情况下提供帮助。我知道这并不完美,但如果我们提供适当的培训,它可以实现我们的目标。

    Grobid 在 github 上以开源形式提供。

    https://github.com/kermitt2/grobid

    【讨论】:

      【解决方案4】:

      PDF 文件可以用 tabula-py 或 tabula-java 解析。

      我在this article 上制作了有关如何使用 tabula-py 的完整教程。只要您安装了 Java,您也可以在网络浏览器中制表。

      【讨论】:

      【解决方案5】:

      除非它是标记内容,否则 PDF 没有结构......您必须“猜测”它,这就是各种工具正在做的事情。 http://blog.idrsolutions.com/2010/09/the-easy-way-to-discover-if-a-pdf-file-contains-structured-content/

      有一篇很好的博客文章解释了这些问题

      【讨论】:

        【解决方案6】:

        正如上面的答案中提到的,PDF 不是很容易解析。但是,如果您有关于要解析的文本的某些附加信息,则可以将其关闭。

        1. 如果您的标题位于页面的特定部分,您可以解析 PDF 文件并按坐标对解析后的输出进行排序。

        2. 如果您事先了解标题和段落之间的间距,您还可以利用此信息来解析文件。

        PDFBox 是一个 PDF 解析工具,您可以使用它来提取文本和图像,您可以在其上定义您的自定义解析规则。

        但是,要解析 PDF,您需要先了解 PDF 文件的一般格式。您可以查看以下博文Document parsing,了解有关文档解析的更多信息。

        免责声明:我参与了这篇博文的撰写。

        【讨论】:

          【解决方案7】:

          iText 接口: PdfReader pr=new PdfReader("C:\test.pdf");

          参考资料: PDF阅读器

          【讨论】:

          • 你想用这个答案表达什么?
          • 这不是正确的回答方式
          猜你喜欢
          • 1970-01-01
          • 2014-07-28
          • 1970-01-01
          • 2023-01-25
          • 1970-01-01
          • 2020-09-17
          • 2016-08-08
          • 1970-01-01
          • 2011-04-20
          相关资源
          最近更新 更多