批量OCRing尚未进行OCR的PDF

时间:2009-10-13 17:10:45

标签: pdf ocr

如果我有10,000个PDF,其中一些已被OCR,其​​中一些有1页已被OCR,但其余页面没有,我怎么能浏览所有PDF并且只有OCR那些避开的页面还没完成?

3 个答案:

答案 0 :(得分:1)

这正是我想要的,我有成千上万个扫描的PDF文件,其中一些已经被OCR处理了,有些还没有。

因此,我结合了在论坛和堆栈溢出中找到的信息,并制定了自己的解决方案,完全做到了这一点,在此为您总结一下:

  • 递归地扫描所有子目录以查找PDF文件;
  • 检查是否已对PDF进行OCR,否则,请使用您可以指定的语言以高质量的OCR处理PDF。
  • 将OCR PDF 保存为原位,作为PDF / A,并覆盖旧的(未进行OCR处理的)PDF。

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

UNTIL!微软宣布,现在很容易在Windows下,同一台计算机上,同一文件系统上运行Linux。 Linux上有比Windows更多的工具和实用程序,所以我想尝试一下。

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

    在Windows控制面板中
  1. 启用 Linux的Windows子系统;有很多指南。谷歌一下。几分钟。
  2. 从Windows应用商店中安装Linux。打开Windows应用商店,搜索 Ubuntu ,然后安装。大约需要5分钟。
  3. 现在您有了“ Ubuntu应用程序”。运行。它显示了Linux bash,并通过 / mnt / c 对Windows文件进行了具有文件访问权限。太神奇了!
  4. 您需要一些Linux“应用”,即 pdffonts ocrmypdf ;您可以使用命令 sudo apt install pdffonts sudo 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处理的PDF,运行此过程当然会花费很长时间。

这是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。我知道这可能并不总是准确和/或正确的,但是对我而言,这足以确定要通过OCR放入哪些文件。这样就不必重新生成成百上千个PDF文件。...

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

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

谢谢。

Jos Jonkeren

答案 1 :(得分:0)

为什么不重新录制一切?你在重复工作上苦苦挣扎的时间可能超过了工作本身所花费的时间。

答案 2 :(得分:0)

如果通过OCRed表示它们包含机器可读形式的文本,您可以使用像Apache PDFBox这样的库来尝试从文档的第二页中提取文本。如果它抛出错误或返回垃圾,它很可能不会被OCR。