【问题标题】:pdfminer - extract text behind LTFigure objectpdfminer - 提取 LTFigure 对象后面的文本
【发布时间】:2021-05-01 17:20:39
【问题描述】:

我正在使用 python pdfminer 库从 pdf 文件中提取文本(请参阅 docs)。

但是,pdfminer 似乎无法提取某些文件中的所有文本,而是提取LTFigure 对象。假设从这个对象的位置它“覆盖”了一些文本,因此这个文本没有被提取。

pdf 文件和带有从 pdf 中提取信息的代码的简短 jupyter notebook 都在我专门创建的 Github 存储库中,以便提出这个问题:

https://github.com/druskacik/ltfigure-pdfminer

我不是 pdf 文件如何工作的专家,但常识告诉我,如果我可以在浏览器中使用 control + f 查找文本,它应该是可提取的。

我考虑过使用其他一些库,但问题是我还需要提取单词的位置(以便将它们用于我的机器学习模型),这是似乎只有 pdfminer 提供的功能。

【问题讨论】:

    标签: python pdf pdfminer


    【解决方案1】:

    鉴于您还考虑其他库,我建议使用 poppler-util 的 pdftohtml 将 pdf 转换为 xml:

    !apt-get install -y poppler-utils
    !pdftohtml -c -hidden -xml document.pdf output.xml
    

    它将输出一个 xml 文件,其中包含框的文本和顶部、左侧、宽度和高度值。 pdfminer 无法识别的文本没有问题。

    【讨论】:

      【解决方案2】:

      好的,所以我终于想出了解决方案。这非常简单 - 可以以与迭代相同的方式迭代 LTFigure 对象,例如LTTextBox 对象。

      interpreter.process_page(page)
      layout = device.get_result()
      
      for lobj in layout:
          if isinstance(lobj, LTTextBox):
              for element in lobj:
                  if isinstance(element, LTTextLine):
                      text = element.get_text()
                      print(text)
      
          elif isinstance(lobj, LTFigure):
              for element in figure:
                  if isinstance(element, LTChar):
                      text = element.get_text()
                      print(text)
      
      

      请注意,正确的方法(以确保解析器读取文档中的所有内容)是递归地迭代 pdfminer 对象,如下所示:How does one obtain the location of text in a PDF with PDFMiner?

      【讨论】:

        猜你喜欢
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 2015-09-17
        • 1970-01-01
        相关资源
        最近更新 更多