需求背景:
数据中台建设完成时,在录入大量词根/字典后,搜索长用词根/字典时很不方便。比如"is",这个词根在很多单次中都会存在,如果不做返回结果的排序,那么查询使用时很不方便。
思路:
我们可以将搜索关键词和搜索返回结果进行长度比较。然后按照从大到小排序(完全相同则为100%),实现相似度排序的效果。
python实现:
定义变量:
## 搜索关键词
word = "aa"
## 词根/字典
list1 = ["aaa", "aaaaaaaa", "aaaaa", "aaaaaa", "aaaa","bbb", "ccc"]
## 过滤掉非匹配词根/字典结果数据存储
list2 = []
##相似度计算结果
dict1 = {}
过滤不匹配词根/字典,相似度计算:
for i in list1:
if word in i :
list2.append(i)
dict1[i] = len(word)/len(i)
print(list2)
print(dict1)
## ['aaa', 'aaaaaaaa', 'aaaaa', 'aaaaaa', 'aaaa']
## {'aaa': 0.6666666666666666, 'aaaaaaaa': 0.25, 'aaaaa': 0.4, 'aaaaaa': 0.3333333333333333, 'aaaa': 0.5}
根据相似度对结果进行排序:
import operator
sorted_dict = dict(sorted(dict1.items(),key=operator.itemgetter(1),reverse=True))
print(sorted_dict)
##{'aaa': 0.6666666666666666, 'aaaa': 0.5, 'aaaaa': 0.4, 'aaaaaa': 0.3333333333333333, 'aaaaaaaa': 0.25}
##对列表排序
sorted_list = sorted(list2, key=lambda x: dict1.get(x),reverse=True)
print(sorted_list)
## ['aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaaa']