python - 使用 PDFminer 解析 pdf(梵文脚本)会给出错误的输出

标签 python parsing pdf hindi pdfminer

<分区>

我正在尝试解析包含印度选民名单的 pdf 文件,该名单采用印地文(梵文脚本)。

PDF 正确显示所有文本,但是当我尝试使用 PDFminer 将此 pdf 转储为文本格式时,它输出的字符与原始 pdf 字符不同

例如 显示/正确的词是सामान्य

但是输出的词是सपमपनद

现在我想知道为什么会发生这种情况以及如何正确解析这种类型的 pdf 文件

我还包括示例 pdf 文件-

http://164.100.180.82/Rollpdf/AC276/S24A276P001.pdf

最佳答案

此问题与 this answer 中讨论的问题非常相似,以及 sample document there 的外观确实也提醒了 document here .

就像另一个问题中的文档一样,此处文档中使用的 Devanagari 脚本字体的 ToUnicode 映射将多个完全不同的字形映射到相同的 Unicode 代码点。因此,基于此映射的文本提取注定会失败,并且大多数文本提取器都依赖于这些信息,尤其是在没有像此处这样的字体编码条目的情况下。


一些文本提取器可以使用嵌入字体程序(如果存在)中包含的字形到 Unicode 的映射。但是在此处文档中使用的 Devanagari 脚本字体程序中检查此映射,事实证明它通过 U+f062 将大多数字形与 U+f020 关联,名为“uniF020”等。

Compact UnicodeBmp

这些 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/

相关文章:

Python 的 sum 返回的结果与 NumPy 的 numpy.sum 不同

python - docker 卡在 django runserver 上

python pandas 散点图错误 : is this a bug with pandas?

java - 给定ANTLR java语法获取java源方法名称列表?

python - 正则表达式量词

algorithm - 并行化解析器存在哪些概念或算法?

python - 使用lxml html从嵌套元素中提取特定元素

c# - 合并在 PDF 中多次使用的同一图像

php - 数组未以 pdf 格式显示在新窗口中。使用 fpdf 类

Python- Reportlabs - 在 2 个不同的页面中保存 2 个不同的图表?