我正在尝试解析一个包含印度选民名单的pdf文件,该名单位于印地文(梵文脚本)。
PDF正确显示所有文本但是当我尝试使用PDFminer将此pdf转换为文本格式时,它会输出与原始pdf字符不同的字符
例如 显示/更正的单词是सामान्य
但输出字是सपमपनद
现在我想知道为什么会这样,以及如何正确解析这种类型的pdf文件
我还包括样本pdf文件 -
答案 0 :(得分:1)
此问题与this answer中讨论的问题非常相似,sample document there的外观也提醒document here。
就像其他问题中的文档一样,文档中使用的Devanagari脚本字体的 ToUnicode 映射将多个完全不同的字形映射到相同的Unicode代码点。因此,基于此映射的文本提取必然会失败,并且大多数文本提取器都依赖于这些信息,尤其是在没有像此处的字体编码条目的情况下。
某些文本提取器可以使用嵌入字体程序(如果存在)中包含的字形到Unicode的映射。但是在这里使用的文件中使用的梵文脚本字体程序中检查这个映射,结果证明它将大多数字形与U + f020和U + f062相关联,命名为" uniF020"等
这些Unicode代码点位于 Unicode专用区中,即它们没有标准化含义,但应用程序可以根据需要使用它们。
因此,使用字体程序中包含的Unicode映射的文本提取器也不会立即提供可理解的文本。
但是,有一个事实可以帮助您主要自动化文档从本文档中提取:在多个页面上引用相同的PDF对象用于梵文脚本字体,所以在所有页面上引用相同的PDF对象相同的原始字符标识符或相同的字体程序私有使用Unicode代码点引用相同的可视符号。如果您的文件我只计算了5份字体。
因此,如果您找到一个文本提取器,它返回字符标识符(忽略所有toUnicode映射)或从字体程序返回私有使用区域Unicode代码点,您可以使用其输出并仅根据a替换每个条目很少有地图。
我还没有使用过这样的文本提取器,所以我在python上下文中都不知道。但谁知道,可能pdfminer或任何其他类似的软件包可以被告知(通过某种选择)忽略误导性的 ToUnicode 地图,然后如上所述使用。