由于ToUnicode映射,PDF文本提取返回错误的字符

pnj*_*pnj 3 pdf pdfminer

我试图使用PDFMiner从外语PDF文件中提取文本,但是被ToUnicode语句挫败了.即使在普通的PDF查看器下,该文件的行为也很奇怪.

例如,以下是文件中某些文本的屏幕截图:

正确的文字

但是,如果我选择并复制文本,它看起来像这样:

िनरकर

您可以看到多个字符已更改,尤其是倒数第二个字符.

毫不奇怪,PDFMiner提取不正确的文本.但每个PDF查看器都能正确显示这些数据.我怀疑问题是ToUnicode地图,或者是带有连接字符的东西.所需的字母应该是0x915,0x94D,0x937的序列.PDFMiner仅报告0x915,它描述了不同的字符.

我需要做些什么才能让PDFMiner正确提取文本,即在图像中而不是复制粘贴文本?

以下是相关PDF链接.

mkl*_*mkl 7

简而言之:

您的PDF不包含在不使用OCR的情况下正确提取文本所需的信息.

详细地:

在PDF中嵌入Mangal-Regular子集的字体程序中的ToUnicode Map和Unicode条目都声称这四个字形

四个字形声称是0x915

all代表相同的Unicode代码点0x915.

因此,任何不查看绘制的字形(即不尝试OCR)的文本提取程序将为这些字形中的任何一个返回0x915.

背景:

您似乎想知道为什么PDF查看器正确显示文本但文本提取(复制和粘贴或PDFMiner)无法正确提取.

原因是作为格式的PDF不包含文本.它包含指向嵌入式字体程序中的字形绘制指令的指针(直接或通过映射).使用这些指针可以按预期绘制PDF.

此外,它可以包含将此类字形指针映射到Unicode代码点的额外信息.这些额外信息由文本提取程序使用.对于PDF,这些映射不正确,因此提取的文本不正确.

  • 我建议您*覆盖此 PDF 中的 ToUnicode 映射*,使用通用 PDF 库以及您选择的编程语言的低级对象访问 API。然后只需遍历 PDF 对象结构,找到 **ToUnicode** 映射流,替换其内容并保存结果。 (2认同)