difflib
difflib 是 Python 标准库中用于比较序列差异的模块,核心算法基于 1986 年的 Ratcliff/Obershelp 算法(又称 gestalt pattern matching),至今仍是工业界最常用的文 本相似度与 diff 生成工具。
info
不要与 filecmp 混淆。
filecmp.cmp(..., shallow=False) 仅判断文件是否完全相同,且性能远不如直接计算 blake3/xxh3 hash。
filecmp 唯一仍有价值的场景是 dircmp 的目录报告和 shall=True 快速过滤。
SequenceMatcher
SequenceMatcher 是 difflib 的底层实现,可比较任意序列(最常用的是字符串),支持计算相似度、提取匹配块等操作。
ratio()、quick_ratio()、real_quick_ratio()
from difflib import SequenceMatcher
def similarity(a: str, b: str) -> float:
return SequenceMatcher(None, a.lower(), b.lower()).ratio()
# 示例
print(similarity("Python is good", "python is good!")) # 0.9032258064516129
print(similarity("今天天气很好", "今天天气非常好")) # 0.8571428571428571
| 方法 | 精度 | 速度 | 推荐场景 |
|---|---|---|---|
ratio() | 高 | 中等 |