如果我有10,000个PDF,其中一些已被OCR,其中一些有1页已被OCR,但其余页面没有,我怎么能浏览所有PDF并且只有OCR那些避开的页面还没完成?
答案 0 :(得分:1)
这正是我想要的,我有成千上万个扫描的PDF文件,其中一些已经被OCR处理了,有些还没有。
因此,我结合了在论坛和堆栈溢出中找到的信息,并制定了自己的解决方案,完全做到了这一点,在此为您总结一下:
我在Windows 10上,找不到确切的答案。我尝试使用Acrobat Pro进行此操作,但这给了我很多错误,并且Acrobat的批处理在每个错误或受密码保护的文件上停止。我还在Windows上尝试了许多其他批处理OCR工具,但都无法正常工作。 我花了无数小时来手动检查哪些文件已经在图像“下方”具有文本层。
UNTIL!微软宣布,现在很容易在Windows下,同一台计算机上,同一文件系统上运行Linux。 Linux上有比Windows更多的工具和实用程序,所以我想尝试一下。
/mnt/c/Users/name/OneDrive/Documents
。find . -type f -name "*.pdf" -exec /your/homedir/pdf-ocr.sh '{}' \;
根据您拥有的PDF数量以及尚未进行OCR处理的PDF,运行此过程当然会花费很长时间。
这是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
好吧,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。