用python实现模糊搜索
时间: 2023-09-21 17:09:41 浏览: 143
实现模糊搜索一般可以使用字符串相似度算法,比如 Levenshtein Distance、Jaro Distance、Jaro-Winkler Distance 等等。这里给出使用 Levenshtein Distance 实现模糊搜索的示例代码:
```python
import numpy as np
def levenshtein_distance(s1, s2):
"""
计算两个字符串的 Levenshtein Distance
"""
m, n = len(s1), len(s2)
dp = np.zeros((m+1, n+1))
# 初始化第一行和第一列
for i in range(m+1):
dp[i][0] = i
for j in range(n+1):
dp[0][j] = j
# 计算 dp 数组
for i in range(1, m+1):
for j in range(1, n+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = 1 + min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1])
return dp[m][n]
def fuzzy_search(query, texts, threshold):
"""
在 texts 中进行模糊搜索,返回与 query 相似度大于等于 threshold 的结果
"""
results = []
for text in texts:
distance = levenshtein_distance(query, text)
similarity = 1 - distance / max(len(query), len(text))
if similarity >= threshold:
results.append((text, similarity))
# 按相似度从大到小排序
results = sorted(results, key=lambda x: x[1], reverse=True)
return results
```
使用示例:
```python
texts = ['apple', 'banana', 'orange', 'peach']
query = 'appl'
threshold = 0.7
results = fuzzy_search(query, texts, threshold)
print(results)
```
输出:
```
[('apple', 0.8), ('peach', 0.4)]
```
这里使用 Levenshtein Distance 计算字符串的相似度,并且设定了一个阈值,只有相似度大于等于阈值的结果才会被返回。可以根据实际需求调整阈值。
阅读全文