从乱码PDF中提取文本

SNA*_*NAG 9 pdf file-format text-analysis

我有一个PDF文件,其中包含有价值的文字信息.

问题是我无法提取文本,我得到的只是一堆乱码.如果我将PDF阅读器中的文本复制并粘贴到文本文件中,也会发生同样的情况.即使文件 - >在Acrobat Reader中另存为文本也会失败.

我已经使用了所有可以拿到的工具,结果是一样的.我相信这与字体嵌入有关,但我不知道到底是什么?

我的问题:

  • 这个奇怪的文字拼写的罪魁祸首什么
  • 如何从PDF中提取文本内容(以编程方式,使用工具,直接操作位等)?
  • 如何修复PDF不复制副本?

Bob*_*sky 24

生成的某些PDF文件没有对从中成功提取文本至关重要的特殊信息.即使是Adobe工具.基本上,这些文件不包含字形到​​字符映射信息.

这些文件将被正确显示和打印(因为字符的形状被正确定义),但是不能正确地复制/提取它们的文本(因为没有关于使用的字形/形状的含义的信息).

例如,当使用"最小文件大小"预设时,Distiller会生成此类文件.

除了OCR之外,没有其他方法可以从这些文件中检索文本,我担心.


补充原始答案

最初的答案提到了"关于使用的字形/形状的含义的信息".此信息应包含在称为/ToUnicode表的PDF结构中.对于作为子集嵌入的每种字体都需要这样的表,并使用非标准(Custom)编码.

为了快速评估文本内容的可提取性,您可以使用pdffonts命令行实用程序.这将以表格形式打印有关PDF使用的每种字体的一系列项目./ToUnicode表格的存在由列标题表示uni.

一些示例输出:

$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-good.pdf

    name                     type        encoding   emb sub uni object ID
    ------------------------ ----------- ---------- --- --- --- ---------
    BAAAAA+Helvetica         TrueType    WinAnsi    yes yes yes     12  0
    CAAAAA+Helvetica-Bold    TrueType    WinAnsi    yes yes yes     13  0


$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-bad1.pdf

    name                     type        encoding   emb sub uni object ID
    ------------------------ ----------- ---------- --- --- --- ---------
    BAAAAA+Helvetica         TrueType    WinAnsi    yes yes no      12  0
    CAAAAA+Helvetica-Bold    TrueType    WinAnsi    yes yes no      13  0


$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-bad2.pdf

    name                     type        encoding   emb sub uni object ID
    ------------------------ ----------- ---------- --- --- --- ---------
    BAAAAA+Helvetica         TrueType    WinAnsi    yes yes yes     12  0
    CAAAAA+Helvetica-Bold    TrueType    WinAnsi    yes yes no      13  0
Run Code Online (Sandbox Code Playgroud)

good.pdf让你正确地提取文本内容为两种字体,因为这两种字体有一个附带的/ToUnicode表格.

对于bad1.pdf和,bad2.pdf文本提取只对两种字体中的一种成功,而另一种则失败,因为只有一种字体有一个/ToUnicode表.

我,Kurt Pfeifle,最近创建了一系列手工编码的PDF文件,以演示/ToUnicodePDF源代码中现有的,错误的,操纵的或缺失的表的影响.这些PDF经过广泛评论,适合在文本编辑器的帮助下进行探索.以上pdffonts输出示例是在这些手动编码文件的帮助下创建的.(还有一些PDF显示不同的结果,有兴趣的读者可能想要探索...)

  • 我还投票重新开放OP(由于一些不明原因而被关闭). (4认同)
  • @SNAG*基本上,这些文件不包含字形到​​字符的映射信息*,同时使用非标准(非ASCII')编码; 在没有正确的字形到字符映射信息的情况下,许多文本提取器假设一些标准编码并尝试提取.每当这个假设失败时,就会产生垃圾. (3认同)

SNA*_*NAG 11

我去了很多人寻求帮助,OCR是解决这个问题的唯一方法

  • 如果您使用Microsoft Office,OneNote具有非常不错的OCR,对于我来说,对于表现出上述问题的PDF文档,我的准确率为100%. (4认同)