【发布时间】: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