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