pdfminer - 提取 LTFigure 对象后面的文本
pdfminer - extract text behind LTFigure object
我正在使用 python pdfminer 库(参见 docs)从 pdf 文件中提取文本。
然而,pdfminer 似乎无法提取某些文件中的所有文本,而是提取 LTFigure
对象。假设从该对象的位置来看,它“覆盖”了一些文本,因此不会提取该文本。
pdf 文件和带有从 pdf 中提取信息的代码的短 jupyter notebook 都在 Github 我专门为提出这个问题而创建的存储库中:
https://github.com/druskacik/ltfigure-pdfminer
我不是 pdf 文件如何工作的专家,但常识告诉我,如果我可以在浏览器中使用 control + f
查找文本,它应该是可提取的。
我考虑过使用其他一些库,但问题是我还需要提取单词的位置(以便将它们用于我的机器学习模型),这是只有 pdfminer 似乎提供的功能。
鉴于您还考虑了其他库,我建议使用 poppler-util 的 pdftohtml 将 pdf 转换为 xml:
!apt-get install -y poppler-utils
!pdftohtml -c -hidden -xml document.pdf output.xml
它将输出一个 xml 文件,其中包含框的文本和顶部、左侧、宽度和高度值。 pdfminer 无法识别的文本没有问题。
好的,所以我终于想出了解决方案。这非常简单 - 可以用与迭代相同的方式迭代 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 lobj:
if isinstance(element, LTChar):
text = element.get_text()
print(text)
请注意,正确的方法(以确保解析器读取文档中的所有内容)是递归地迭代 pdfminer
对象,如下所示:How does one obtain the location of text in a PDF with PDFMiner?
我正在使用 python pdfminer 库(参见 docs)从 pdf 文件中提取文本。
然而,pdfminer 似乎无法提取某些文件中的所有文本,而是提取 LTFigure
对象。假设从该对象的位置来看,它“覆盖”了一些文本,因此不会提取该文本。
pdf 文件和带有从 pdf 中提取信息的代码的短 jupyter notebook 都在 Github 我专门为提出这个问题而创建的存储库中:
https://github.com/druskacik/ltfigure-pdfminer
我不是 pdf 文件如何工作的专家,但常识告诉我,如果我可以在浏览器中使用 control + f
查找文本,它应该是可提取的。
我考虑过使用其他一些库,但问题是我还需要提取单词的位置(以便将它们用于我的机器学习模型),这是只有 pdfminer 似乎提供的功能。
鉴于您还考虑了其他库,我建议使用 poppler-util 的 pdftohtml 将 pdf 转换为 xml:
!apt-get install -y poppler-utils
!pdftohtml -c -hidden -xml document.pdf output.xml
它将输出一个 xml 文件,其中包含框的文本和顶部、左侧、宽度和高度值。 pdfminer 无法识别的文本没有问题。
好的,所以我终于想出了解决方案。这非常简单 - 可以用与迭代相同的方式迭代 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 lobj:
if isinstance(element, LTChar):
text = element.get_text()
print(text)
请注意,正确的方法(以确保解析器读取文档中的所有内容)是递归地迭代 pdfminer
对象,如下所示:How does one obtain the location of text in a PDF with PDFMiner?