如果我有 10,000 个 PDF,其中一些已经过 OCR,其中一些有 1 个页面已经过 OCR,但其余页面没有,我怎么能浏览所有的 PDF 而只有 OCR 还没有的页面完成了吗?
小智 5
这正是我一直在寻找的,我有数千个扫描的 PDF 文件,其中一些已经进行了 OCR 处理,有些还没有。
所以,我结合了我在论坛和 Stack Overflow 上找到的信息,并制作了我自己的解决方案,完全可以做到这一点,我在这里为您总结了:
我在 Windows 10 上,找不到明确的答案。我尝试使用 Acrobat Pro 执行此操作,但这给了我很多错误,并且 Acrobat 的批处理会在每个错误或受密码保护的文件上停止。我还在 Windows 上尝试了许多其他批处理 OCR 工具,但没有一个工作得很好。我花了无数个小时手动检查哪些文件已经在图像“下方”具有文本层。
直到!微软宣布现在在 Windows 下,在同一台机器上,在同一个文件系统上运行 Linux 非常容易。Linux 上可用的工具和实用程序比 Windows 多,所以我想我会尝试一下。
/mnt/c/Users/name/OneDrive/Documents
。find . -type f -name "*.pdf" -exec /your/homedir/pdf-ocr.sh '{}' \;
当然,运行它可能需要很长时间,具体取决于您拥有多少 PDF,以及其中有多少尚未经过 OCR。
这是 sh 脚本。您应该将它保存在您的主文件夹中的某个位置,以便从任何地方轻松调用。像这样:
cd ~
. 这会将您带到您的主文件夹。pico pdf-ocr.sh
. 这将打开一个编辑器。粘贴以下脚本代码。然后按 Ctrl+X,然后按 Y。您的文件现已保存。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
Run Code Online (Sandbox Code Playgroud)
好吧,该find
命令查找当前目录中的所有 PDF 文件,包括子目录。然后它将这些文件“发送”到脚本,在脚本中pdffonts
检查是否有嵌入的字体。如果是这样,请跳过该文件并尝试下一个。如果未找到嵌入字体,请使用ocrmypdf
进行 OCR 处理。我发现ocrmypdf的 OCR 质量非常好,甚至比 Acrobat 还要好。您当然可以调整设置。例如,我可以想象您可能希望使用其他语言进行 OCR,而不是eng+deu+nld
. 您可以在此处查找所有选项:https : //ocrmypdf.readthedocs.io/en/latest/
注意:我在这里假设,如果PDF 文件没有嵌入字体(因此它基本上是 PDF 文件中的图像(扫描)),则它没有经过OCR 处理。我知道这可能并不总是准确和/或真实,但对我来说这足以确定哪些文件要通过 OCR。这样就没有必要重新制作成百上千的 PDF 文件了....
我知道在 Windows 下安装 Linux 会比较麻烦,但是如果您有基本的 Linux 技能,这很容易做到。对我来说这是值得的,因为我现在已经制作了可以工作的“一键式”批处理器。我无法使用 Windows 工具找到解决方案。
我希望有人发现这个并发现这很有用。如果有人有改进,请在此处发布。
谢谢。
乔斯·琼克伦