由于 ToUnicode 映射,PDF 文本提取 returns 个错误字符

PDF text extraction returns wrong characters due to ToUnicode map

我正在尝试使用 PDFMiner 从外语 PDF 文件中提取文本,但被 ToUnicode 语句挫败了。即使在普通的 PDF 查看器下,该文件也表现异常。

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

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

िनरकर

您可以看到几个字符发生了变化,尤其是倒数第二个字符。

毫不奇怪,PDFMiner 提取了不正确的文本。但是每个 PDF 查看器都能正确显示这些数据。我怀疑问题出在 ToUnicode 映射或带有连体字符的问题上。所需的字母应该是 0x915、0x94D、0x937 的序列。 PDFMiner 只报告 0x915,它描述了一个不同的字符。

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

这里有一个 link to the PDF 有问题。

简而言之:

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

详细:

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

都代表相同的 Unicode 代码点,0x915。

因此,任何不查看绘制的字形(即不尝试 OCR)的文本提取程序都将 return 0x915 用于这些字形中的任何一个。

背景:

您似乎想知道为什么 PDF 查看器可以正确显示文本,但文本提取(复制粘贴或 PDFMiner)不能正确提取。

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

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