如何识别需要OCR的PDF文件?

12

我有超过30,000个PDF文件。一些文件已经进行了OCR,一些没有。有没有办法找出哪些文件已经进行了OCR,哪些PDF只是图像?

如果我让每个文件都通过OCR处理器运行,那将需要很长时间。

5个回答

5
我会编写一个小脚本来从PDF文件中提取文本,并查看它是否“为空”。如果有文本,则PDF文件已经进行了OCR。您可以使用GhostscriptXPDF来提取文本。
编辑: 这应该能帮助你入门:
foreach ($pdffile in get-childitem -filter *.pdf){
    $pdftext=invoke-expression ("\path\to\xpdf\pdftotext.exe '"+$pdffile.fullname+"' -");
    write-host $pdffile.fullname
    write-host $pdftext.length;
    write-host $pdftext;
    write-host "-------------------------------";
}

不幸的是,即使你的PDF只有图片,pdftotext也会提取一些文本,因此你需要做更多的工作来检查是否需要对PDF进行OCR。


谢谢您的回答。至少您给了我一些思考的东西。能否使用ghostscript或xpdf构建powershell脚本?您是否有任何方便我尝试的内容?再次感谢。 - Fuji - H2O
在我的答案中添加了一些脚本。 - Ocaso Protal
@Fuji-H2O,我正在寻找相同的解决方案。我需要检查PDF文件中是否至少有1个图像。我知道这是一个非常老的问题,但如果你还记得,请帮我提供解决方案。 - Adarsh Tiwari
1
如果 PDF 同时包含文本和图片,该怎么办? - Amey P Naik

2

XPDF对我有所帮助,但我不确定这是否是正确的方法。

我的PDF文件包含图像和文本内容。因此,我使用pdffonts.exe来验证文档中是否嵌入了字体。在我的情况下,所有图像文件的嵌入值都显示为“否”。

> Config Error: No display font for 'Symbol' 
> Config Error: No display font for 'ZapfDingbats' 
> name                                 type              emb sub uni object ID
> ------------------------------------ ----------------- --- --- --- --------- 
> Helvetica                            Type 1            no  no  no       7  0

所有可搜索的PDF文档都显示为“是”。
> Config Error: No display font for 'Symbol'
> Config Error: No display font for 'ZapfDingbats'
> name                                 type              emb sub uni object ID
> ------------------------------------ ----------------- --- --- --- ---------
> ABCDEE+Calibri                       TrueType          yes yes no       7  0
> ABCDEE+Calibri,Bold                  TrueType          yes yes no       9  0

1
我发现TotalCmd有一个处理这个的插件: https://totalcmd.net/plugring/pdfOCR.html pdfOCR是wdx插件,它可以发现当前目录中PDF文件的页数需要字符识别(OCR),即PDF文件中有多少页面没有可搜索的文本。当人们为自己的文档或归档系统准备PDF文件时,通常需要这样做。一般来说,在处理PDF文件时,需要将其从扫描版本转换为可进行手动或自动文本搜索的文本可搜索形式,以便将其包含在任何文档中。 Total Commander的pdfOCR插件通过显示仅具有图像而没有文本的页面数量,满足了图书管理员的需求。扫描页面的数量显示在“needOCR”列中。通过比较needOCR页面数和总页面数,可以决定是否需要对PDF文件进行额外的OCR处理。

0
以下脚本将递归查找需要OCR的文件。您需要从您喜欢的来源获取pdftotext。我使用Cygwin来安装它。
#!/bin/bash
find . -name "*.pdf" | while read file; do
if [ -z "$(pdftotext "$file" - | sed 's/\s//g')" ]; then
echo $file
fi
done

我使用以下脚本将需要OCR的文件移动到一个子文件夹中,以便我可以使用Acrobat进行批量OCR。您也可以选择使用命令行工具直接运行OCR。
#!/bin/bash
mkdir ocr
for file in *.pdf; do
echo $file
if [ -z "$(pdftotext "$file" - | sed 's/\s//g')" ]; then
mv "$file" ocr
fi
done

-1
你可以使用桌面搜索工具"dtSearch"扫描文件夹或整个驱动器。扫描结束后,它将显示所有“仅图像”PDF的列表。此外,如果有的话,它还会显示一个“加密”PDF的列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接