소스 검색

新增字符串相似度算法文档,详细解释四种算法及其适用场景和例子

zhch158_admin 1 개월 전
부모
커밋
a6a21562a8
1개의 변경된 파일84개의 추가작업 그리고 0개의 파일을 삭제
  1. 84 0
      compare_ocr_results-算法.md

+ 84 - 0
compare_ocr_results-算法.md

@@ -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结果、文本去重、模糊搜索等场景。