|
|
@@ -0,0 +1,84 @@
|
|
|
+好的,下面详细解释这4种字符串相似度算法,并举例说明它们的作用和区别。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 1. `fuzz.ratio`
|
|
|
+
|
|
|
+**原理**:
|
|
|
+计算两个字符串的整体相似度,基于 [Levenshtein 距离](https://en.wikipedia.org/wiki/Levenshtein_distance)(编辑距离),衡量将一个字符串变成另一个字符串所需的最少编辑操作数(插入、删除、替换)。
|
|
|
+
|
|
|
+**适用场景**:
|
|
|
+适合比较长度相近、顺序一致的字符串。
|
|
|
+
|
|
|
+**例子**:
|
|
|
+
|
|
|
+| 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结果、文本去重、模糊搜索等场景。
|