【问题标题】:Batch OCRing PDFs that haven't already been OCR'd批量 OCRing 尚未进行 OCR 处理的 PDF
【发布时间】:2010-12-06 09:45:46
【问题描述】:

如果我有 10,000 个 PDF,其中一些已被 OCRed,其中一些有 1 页已被 OCRed,但其余页面没有,我如何才能浏览所有 PDF 并且只 OCR 没有的页面'还没有完成?

【问题讨论】:

标签: pdf ocr


【解决方案1】:

这正是我一直在寻找的,我有数千个扫描的 PDF 文件,其中一些已经过 OCR,而另一些则没有。

所以,我结合了我在论坛和 Stack Overflow 上找到的信息,并制作了自己的解决方案,完全可以做到这一点,我在这里为你总结了:

  • 递归扫描所有子目录以查找 PDF 文件;
  • 检查如果 PDF 已经过 OCR,如果没有,则使用您可以指定的语言使用高质量的 OCR 处理 PDF;
  • 将 OCR PDF 就地保存为 PDF/A,并覆盖旧的(未经过 OCR 处理的)文件。

我在 Windows 10 上,找不到明确的答案。我尝试使用 Acrobat Pro 执行此操作,但这给了我很多错误,并且 Acrobat 的批处理会在每个错误或受密码保护的文件上停止。我还在 Windows 上尝试了许多其他批处理 OCR 工具,但没有一个效果很好。 我花了无数个小时手动检查哪些文件已经在图像“下方”有一个文本层。

直到! 微软宣布现在可以很容易地在 Windows 下,在同一台机器上,在同一文件系统上运行 Linux。 Linux 上可用的工具和实用程序比 Windows 多得多,所以我想我会尝试一下。

所以,这里,一步一步来:

  1. 在 Windows 控制面板中启用 适用于 Linux 的 Windows 子系统;有很多指南。去谷歌上查询。几分钟。
  2. 从 Windows 应用商店安装 Linux。打开 Windows 应用商店,搜索 Ubuntu,然后安装。大约需要 5 分钟。
  3. 现在您有了“Ubuntu 应用程序”。运行。它向您展示了 linux bash,以及通过 /mnt/c 对您的 Windows 文件进行文件访问。太神奇了!
  4. 您需要一些 Linux “应用程序”,即 pdffontsocrmypdf;您可以使用命令 sudo apt install pdffontssudo apt install ocrmypdf 进行安装。我们将使用这些应用程序检查 PDF 中是否有嵌入字体,如果没有,则对 PDF 进行 OCR。 (见下面的注释)。
  5. 将非常小的 bash 脚本(如下)安装到您的主目录 ~.
  6. 转到 (cd) 保存所有 PDF 的目录。例如:/mnt/c/Users/name/OneDrive/Documents
  7. 运行命令:find . -type f -name "*.pdf" -exec /your/homedir/pdf-ocr.sh '{}' \;

完成!

当然,运行此操作可能需要很长时间,具体取决于您拥有多少 PDF,以及其中有多少尚未 OCR。

这里是 sh 脚本。您应该将它保存在您的主文件夹中的某个位置,以便可以从任何地方轻松调用。像这样:

  1. 输入cd ~。这会将您带到您的主文件夹。
  2. 输入pico pdf-ocr.sh。这将弹出一个编辑器。粘贴以下脚本代码。然后按 Ctrl+X,再按 Y。您的文件现在已保存。
  3. 输入sudo chmod +x pdf-ocr.sh。这将授予脚本运行权限。
MYFONTS=$(pdffonts -l 5 "$1" | tail -n +3 | cut -d' ' -f1 | sort | uniq)
if [ "$MYFONTS" = '' ] || [ "$MYFONTS" = '[none]' ]; then
    echo "Not yet OCR'ed: $1 -------- Processing...."
        echo " "
        ocrmypdf -l eng+deu+nld -s "$1" "$1"
        echo " "
else
    echo "Already OCR'ed: $1"
echo " "
fi

这是做什么的?

好吧,find 命令会查找当前目录中的所有 PDF 文件,包括子目录。然后它将这些文件“发送”到脚本,pdffonts 检查是否有嵌入的字体。如果是这样,请跳过该文件并尝试下一个。如果未找到嵌入字体,请使用 ocrmypdf 进行 OCR 处理。 我发现 ocrmypdf 的 OCR 质量非常好,甚至比 Acrobat 的还要好。您当然可以调整设置。例如,我可以想象您可能想要使用除eng+deu+nld 之外的其他语言进行 OCR。您可以在这里查看所有选项:https://ocrmypdf.readthedocs.io/en/latest/

注意:我在这里假设如果一个PDF文件有没有嵌入字体(所以它基本上是一个图像(扫描)在 PDF 文件中),它有没有 OCR'ed。我知道这可能并不总是准确和/或真实的,但对我来说,这足以确定哪些文件要通过 OCR。这样就不需要重新做成百上千的 PDF 文件了....

我知道在 Windows 下安装 Linux 有点麻烦,但如果你有基本的 Linux 技能,这很容易做到。对我来说,付出努力是值得的,因为我现在已经制作了可以工作的“一键式”批处理器。我找不到使用 Windows 工具的解决方案。

我希望有人发现这个并且觉得这个很有用。如果有人有改进,请在此处发布。

谢谢。

乔斯·琼克伦

【讨论】:

  • 在我的情况下(windows 10,ubuntu 20.04)无法通过“sudo apt install pdffonts”安装pdfffonts。我必须通过“apt install poppler-utils”安装它
【解决方案2】:

为什么不对所有内容重新进行 OCR?您为重复工作所花费的时间可能超过了工作本身所花费的时间。

【讨论】:

    【解决方案3】:

    如果 OCRed 的意思是它们包含机器可读形式的文本,则可以使用 Apache PDFBox 之类的库来尝试从文档的第二页中提取文本。如果它抛出错误或返回垃圾,很可能不是 OCRed。

    【讨论】:

      【解决方案4】:

      挖掘这个线程。

      您可以通过使用 pdffonts 测试哪些 PDF 文件已经过 OCRed。如果有嵌入字体,很可能PDF已经是OCRed了。

      关于批处理,我写了一个小脚本,可以将 OCR 批处理为 pdf/word/excel/csv 输出格式。

      您可以在https://github.com/deajan/pmOCR 找到它 pmOCR(穷人的 OCR 是 Abbyy OCR CLI for linux 或 Tesseract 3 开源解决方案的封装)。

      【讨论】:

        猜你喜欢
        • 2011-08-26
        • 2019-05-26
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多