【问题标题】:PDF text extraction returns wrong characters due to ToUnicode map由于 ToUnicode 映射,PDF 文本提取返回错误字符
【发布时间】:2015-02-23 16:47:38
【问题描述】:

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

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

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

िनरकर

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

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

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

这是一个有问题的link to the PDF

【问题讨论】:

    标签: pdf pdfminer


    【解决方案1】:

    简而言之:

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

    详细说明:

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

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

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

    背景:

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

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

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

    【讨论】:

    • 很好的答案。 OCR 在这里不是一个选项;但是我愿意使用低级 PDF 工具。此 PDF 中的字体表并不大;我可以手动创建自己正确的 ToUnicode 映射。那时,我是否可以 (i) 覆盖此 PDF 中的 ToUnicode 映射,或者 (ii) 修改提取程序(如 PDFMiner)的代码以使用我手动创建的映射?如果其中任何一个可行,您建议使用什么工具?
    • 我建议您覆盖此 PDF 中的 ToUnicode 映射,使用具有低级对象访问 API 的通用 PDF 库,用于您选择的编程语言。那么只需要遍历PDF对象结构,找到ToUnicode映射流,替换其内容,保存结果即可。
    • 我们面临的问题非常相似 - 除了 Lohit - 梵文。你能解决问题吗?
    • @wireman 我只提出了一种方法,在这方面没有解决任何问题,并且 pnj 的个人资料显示“最后一次看到 2018 年 7 月 12 日 12:18”,所以他不太可能在全部。因此,您可能希望将此作为实际问题(不仅仅是评论),参考此答案但请求更多实际帮助。
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    相关资源
    最近更新 更多