我目前正在分析一组PDF文件。我想知道有多少PDF文件属于这三类:
- 数字创建的PDF:文本存在(可复制),并保证其正确性,因为它是直接创建的,例如从Word创建的
- 仅图像PDF:扫描的文档
- 可搜索PDF:扫描的文档,但使用了OCR引擎。OCR引擎将文本放在图像的“下方”,以便您可以搜索/复制内容。由于OCR非常好,大多数情况下这是正确的。但这并不能保证是正确的李>
在我的域中很容易识别仅图像PDF,因为每个PDF都包含文本。如果我不能提取任何文本,它只是图像。但是,我如何知道它是“仅仅”一个可搜索的PDF,还是一个数字化创建的PDF
顺便说一句,这并不像我看到的扫描文档中制作人字段上写着“MicrosoftWord”那样简单
注意:作为一个人,这很容易。我只是放大文本。如果我看到像素,它“只是”可搜索
以下是测试解决方案的3个示例PDF文件:
我的努力/想法
- 使用创建者/制作人:我在扫描的文档中看到“Microsoft Word”。这也会很乏味李>
- 嵌入式字体:您可以extract embedded fonts。当时的想法是,扫描的文档不会嵌入字体,而是使用默认字体。从这个例子可以看出,这个想法是错误的李>
Tags:
从How to check if PDF is scanned image or contains text修改this answer
在这个解决方案中,您不必渲染pdf,因此我猜它会更快。基本上,我修改的答案使用文本覆盖的pdf区域的百分比来确定它是文本文档还是扫描文档(图像)
我添加了一个类似的推理,计算图像覆盖的总面积来计算图像覆盖的百分比。如果它大部分被图像覆盖,您可以假定它是扫描的文档。您可以移动阈值以适应文档集合
我还添加了逻辑来逐页检查。这是因为至少在我拥有的文档集合中,一些文档可能有一个数字创建的第一页,然后扫描其余的页面
修改代码:
您可以通过bash脚本来完成
谢谢
使用PyMuPDF,您可以轻松删除@ypnos建议所需的所有文本
另一种选择是,使用PyMuPDF,您还可以检查文本是否隐藏在PDF中。在PDF的相关“迷你语言”中,这是由命令
3 Tr
(“文本呈现模式”,例如,参见第402页,共https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf)触发的。 因此,如果所有文本都受此命令的影响,则不会呈现任何文本,从而得出“这是一个OCR页面”的结论相关问题 更多 >
编程相关推荐