<分区>
我正在尝试解析包含印度选民名单的 pdf 文件,该名单采用印地文(梵文脚本)。
PDF 正确显示所有文本,但是当我尝试使用 PDFminer 将此 pdf 转储为文本格式时,它输出的字符与原始 pdf 字符不同
例如 显示/正确的词是सामान्य
但是输出的词是सपमपनद
现在我想知道为什么会发生这种情况以及如何正确解析这种类型的 pdf 文件
我还包括示例 pdf 文件-
<分区>
我正在尝试解析包含印度选民名单的 pdf 文件,该名单采用印地文(梵文脚本)。
PDF 正确显示所有文本,但是当我尝试使用 PDFminer 将此 pdf 转储为文本格式时,它输出的字符与原始 pdf 字符不同
例如 显示/正确的词是सामान्य
但是输出的词是सपमपनद
现在我想知道为什么会发生这种情况以及如何正确解析这种类型的 pdf 文件
我还包括示例 pdf 文件-
最佳答案
此问题与 this answer 中讨论的问题非常相似,以及 sample document there 的外观确实也提醒了 document here .
就像另一个问题中的文档一样,此处文档中使用的 Devanagari 脚本字体的 ToUnicode 映射将多个完全不同的字形映射到相同的 Unicode 代码点。因此,基于此映射的文本提取注定会失败,并且大多数文本提取器都依赖于这些信息,尤其是在没有像此处这样的字体编码条目的情况下。
一些文本提取器可以使用嵌入字体程序(如果存在)中包含的字形到 Unicode 的映射。但是在此处文档中使用的 Devanagari 脚本字体程序中检查此映射,事实证明它通过 U+f062 将大多数字形与 U+f020 关联,名为“uniF020”等。
这些 Unicode 代码点位于 Unicode 专用区,即它们没有标准化的含义,但应用程序可以随意使用它们。
因此,使用字体程序中包含的 Unicode 映射的文本提取器也不会立即提供可理解的文本。
尽管如此,有一个事实可以帮助您大部分从该文档中自动提取文本:多个页面上的 Devanagari script 字体引用了相同的 PDF 对象,因此在所有页面上引用相同的 PDF 对象相同的原始字符标识符或相同的字体程序私有(private)使用 Unicode 代码点引用相同的视觉符号。对于您的文档,我只计算了 5 个字体副本。
因此,如果您发现文本提取器返回字符标识符(忽略所有 toUnicode 映射)或从字体程序返回专用区域 Unicode 代码点,您可以使用其输出并仅根据几张 map 。
我还没有使用过这样的文本提取器,所以在 python 上下文中我不知道。但谁知道呢,可能会告诉 pdfminer 或任何其他类似的包(通过某些选项)忽略误导性的 ToUnicode 映射,然后按上面概述的方式使用。
关于python - 使用 PDFminer 解析 pdf(梵文脚本)会给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31876415/