【问题标题】:pdfminer3 is not extracting the text from colored pdf pages, how to convert pdf page into grayscale?pdfminer3 没有从彩色 pdf 页面中提取文本,如何将 pdf 页面转换为灰度?
【发布时间】:2020-12-17 10:59:55
【问题描述】:

我正在使用 pdfminer3 库从 pdf 中提取文本。但它在彩色页面中效果不佳。我尝试使用以下代码从 pdf 中提取文本:

from pdfminer3.layout import LAParams, LTTextBox
from pdfminer3.pdfpage import PDFPage
from pdfminer3.pdfinterp import PDFResourceManager
from pdfminer3.pdfinterp import PDFPageInterpreter
from pdfminer3.converter import PDFPageAggregator
from pdfminer3.converter import TextConverter
import io

resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle, laparams=LAParams())
page_interpreter = PDFPageInterpreter(resource_manager, converter)

with open("pdffile.pdf", 'rb') as fh:
    for page in PDFPage.get_pages(fh,caching=True,check_extractable=True):
        page_interpreter.process_page(page)
    text = fake_file_handle.getvalue()
f1=open("pdftext.txt","w+",encoding="utf8")
for i in text:
    f1.write(str(i))

# close open handles
converter.close()
fake_file_handle.close()

print(text)

它只能很好地从某些文件中提取数据。但从彩色区域中提取数据如下:

(cid:7)(cid:1)(cid:4)(cid:1)(cid:9)(cid:16)(cid:20)(cid:17)

(cid:10)(cid:15)(cid:14)(cid:1)(cid:16)(cid:20)(cid:17)

(cid:1)(cid:14)(cid:18)(cid:1)(cid:12) (cid:18)(cid:1)(cid:19)(cid:2)(cid:1)(cid:17)(cid:9)

(cid:18)(cid:20)(cid:12)(cid:19)(cid:1)(cid:14)(cid:16)(cid:20)(cid:17)

这不是我的数据在 pdf 中的样子。它是一个简单的字母数字数据。我不知道为什么它显示 cid: 它甚至不在我的 pdf 文件中。

谁能告诉我如何将 pdf 转换为灰度 pdf 页面。所以我可以使用pdfminer。我不想将 pdf 转换为图像然后转换为 grascale,我已经完成了,因为 pytesseract 没有很好地从中提取数据。

我也尝试了 pdfplumber,但它也没有给我正确的数据。或者任何人都可以建议我从图像中提取文本的库,除了 pytesseract。

最后,我使用在线转换器工具将 pdf 页面转换为灰度。当我尝试从中提取数据时,它会给出与我上面提到的相同的输出。所以,我想问题出在 pdfminer 或我的代码中。如何解决此问题。

这是我试图从中提取文本的 pdf 文件之一,它给出了空白输出:Pdf file

【问题讨论】:

  • 正如您已经发现的那样,颜色不会干扰文本提取。我们没有您的 PDF,所以我们只能做出(有根据的)猜测。我的猜测是该页面上使用的字体根本不包含文本提取所需的信息。
  • 这是一份报纸页面pdf。我想从中提取文章。有些页面可以正常工作,有些则不能。页面之间也没有太大区别。
  • 你能分享有问题的pdf吗?如果您分享它,这里的人们可以尝试分析出现的任何问题。到目前为止,您提供的信息表明很可能缺少用于文本提取的信息,但所述分析可能会出现不同的结果。
  • 抱歉,由于某些政策,我无法共享 pdf。但我尝试了许多 pdf 文件,它只适用于某些 pdf,在某些 pdf 中它只返回空白,甚至不是单个字符
  • 在这种情况下,我只能说很可能缺少用于文本提取的信息。

标签: python pdf text-extraction grayscale pdfminer


【解决方案1】:

您的示例 PDF 仅包含一些报纸页面的位图图像。

另一方面,文本提取是从 PDF 中的文本绘制指令中提取文本,而不是位图图像。

要从 PDF 中检索文本,您必须应用 OCR。

【讨论】:

  • 你如何发现它是位图图像?我尝试了 ocr,因为我尝试在将文本转换为灰度后使用 pytesseract 提取文本,但由于某些像素混淆,它没有提供正确的输出。
  • 我用一个工具浏览了pdf的内部结构。准确地说,Itext RUPS。其他制造商也有类似的产品,例如PDFBox PDF调试器。 Adobe Acrobat Preflight 中也有这样的工具。
  • 那么我应该怎么做才能使其可用于 pdfminner3
  • Pdfminer 是一个文本提取工具,即一种从 pdf 中的文本绘图指令中提取文本的工具。像您的示例这样的 Pdf 不包含文本绘制说明,仅包含位图。因此,pdfminer 是在那里检索文本的错误工具。而是使用 ocr 工具。
猜你喜欢
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
  • 2011-11-28
  • 2011-01-13
相关资源
最近更新 更多