compare_ocr_results-算法.md 2.8 KB

好的,下面详细解释这4种字符串相似度算法,并举例说明它们的作用和区别。


1. fuzz.ratio

原理
计算两个字符串的整体相似度,基于 Levenshtein 距离(编辑距离),衡量将一个字符串变成另一个字符串所需的最少编辑操作数(插入、删除、替换)。

适用场景
适合比较长度相近、顺序一致的字符串。

例子

text1 text2 ratio
"apple" "applf" 80
"apple" "apple pie" 67

2. fuzz.partial_ratio

原理
寻找较短字符串在较长字符串中的最佳匹配片段,然后计算这部分的相似度。适合一段文本包含另一段文本的情况。

适用场景
适合短字符串与长字符串部分重叠的情况。

例子

text1 text2 partial_ratio
"apple" "apple pie" 100
"apple" "I like apple" 100
"apple" "banana apple" 100

3. fuzz.token_sort_ratio

原理
先将字符串按空格分词,然后排序,再拼接成字符串后比较相似度。这样可以忽略单词顺序的影响。

适用场景
适合单词顺序不同但内容相同的情况。

例子

text1 text2 token_sort_ratio
"apple pie" "pie apple" 100
"pie apple" "apple pie" 100
"apple banana" "banana apple" 100

4. fuzz.token_set_ratio

原理
将字符串分词后,分别取交集、差集,分别计算相似度,最后取最大值。能处理部分重叠、部分不同的情况。

适用场景
适合两个字符串有部分相同单词、部分不同单词的情况。

例子

text1 text2 token_set_ratio
"apple pie" "apple pie banana" 100
"apple banana" "banana apple pie" 100
"apple pie" "banana pie apple" 100
"apple pie" "banana orange apple" 67

总结

  • ratio:整体比较,顺序敏感。
  • partial_ratio:短字符串在长字符串中找最佳匹配,适合包含关系。
  • token_sort_ratio:忽略单词顺序。
  • token_set_ratio:忽略顺序,且能处理部分重叠。

这些算法常用于OCR结果、文本去重、模糊搜索等场景。