好的，下面详细解释这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结果、文本去重、模糊搜索等场景。