这是一个 Python 脚本,用于自动识别并删除 PDF 文件中重复或高度相似的页面。它通过将页面转换为图像并比较它们的感知哈希值来实现,非常适合清理扫描的文档、报告或任何可能包含冗余页面的 PDF 文件。
- 精确去重:基于图像感知哈希算法 (
pHash
),能够识别内容相似但并非完全相同的页面。 - 可调相似度:可以自定义相似度阈值,灵活控制“重复”的判断标准。
- 单个文件处理:快速处理单个指定的 PDF 文件。
- 批量处理:支持处理整个文件夹内的所有 PDF 文件,或通过通配符匹配特定文件,并将结果保存到指定输出目录。
- 跨平台:基于 Python,可在 Windows, macOS, 和 Linux 上运行。
- 开源:代码完全开源,您可以根据需要自由修改和使用。
脚本的核心思想是“眼见为实”。它不会去比较页面的底层代码或文本,而是:
- 逐页渲染:使用
PyMuPDF
库将 PDF 的每一页都渲染成一张图片。 - 生成指纹:使用
imagehash
库为每张图片计算一个“感知哈希值”。这个哈希值可以看作是图片内容的“视觉指纹”。 - 比较指纹:通过计算两个哈希值之间的“汉明距离”来判断它们的相似程度。距离越小,图片越相似。
- 剔除重复:如果一个页面的“指纹”与之前某个唯一页面的“指纹”足够相似(汉明距离小于等于设定的阈值),则将其标记为重复页面。
- 生成新文件:最后,脚本将所有被判断为“唯一”的页面整合到一个新的 PDF 文件中。
在开始之前,请确保您已经安装了 Python 3.6 或更高版本。
-
克隆或下载本项目。
-
打开终端或命令行,进入项目目录,然后使用 pip 安装所需的依赖库:
pip install PyMuPDF imagehash Pillow
本脚本通过命令行运行,支持多种操作模式。
这是最基本的功能。指定输入文件和输出文件的路径即可。
命令格式:
python remove_duplicates.py <输入文件路径> <输出文件路径>
示例:
python remove_duplicates.py "my_document.pdf" "my_document_cleaned.pdf"
处理一个文件夹内的所有 PDF 文件,并将去重后的文件保存到另一个文件夹。
命令格式:
python remove_duplicates.py <输入文件夹路径> <输出文件夹路径>
示例:
python remove_duplicates.py "./scanned_docs" "./cleaned_docs"
脚本会自动在 ./cleaned_docs
文件夹中创建名为 deduplicated_...
的新文件。
您可以通过一些可选参数来微调脚本的行为。
-
--threshold
或-t
: 相似度阈值 设置一个整数来定义页面相似度的判断标准。默认值为5
。0
: 只有完全一模一样的图片才算重复。1-5
: 比较严格,适用于页面内容几乎没有变化的情况。> 5
: 比较宽松,可以容忍页面上的一些轻微差异(如页眉页脚的微小变动)。
示例 (使用更严格的阈值):
python remove_duplicates.py "report.pdf" "report_strict.pdf" --threshold 2
-
--pattern
或-p
: 文件匹配模式 在批量处理模式下,使用通配符来筛选需要处理的文件。默认值为*.pdf
(所有pdf文件)。示例 (只处理文件名以 'chapter_' 开头的文件):
python remove_duplicates.py "./my_book" "./my_book_cleaned" --pattern "chapter_*.pdf"
本项目采用 MIT 许可证。