两个字符串列表的相似度评分

4 投票
1 回答
10542 浏览
提问于 2025-04-17 21:46

我有一个字符串列表作为查询,还有几百个其他的字符串列表。我想把这个查询和每个其他列表进行比较,并提取它们之间的相似度分数。

举个例子:

query = ["football", "basketball", "martial arts", "baseball"]

list1 = ["apple", "football", "basketball court"]

list2 = ["ball"]

list3 = ["martial-arts", "baseball", "banana", "food", "doctor"]

我现在做的事情是对它们进行绝对比较,但我对结果不太满意。

score = 0
for i in query:
   if i in list1:
      score += 1

score_of_list1 = score*100//len(list1)

我找到一个可能对我有帮助的库 fuzzywuzzy,但我在想你有没有其他的建议。

1 个回答

6

如果你想找一种方法来比较字符串之间的相似性,这个StackOverflow的问题推荐了莱文斯坦距离作为一种方法。

这里有一个现成的解决方案,而且它也包含在自然语言工具包这个库里。

最简单的整合方法是这样的(我用随机数只是为了得到一个结果,这样做显然没有意义):

#!/usr/bin/env python
query = ["football", "basketball", "martial arts", "baseball"]
lists = [["apple", "football", "basketball court"], ["ball"], ["martial-arts", "baseball", "banana", "food", "doctor"]]
from random import random

def fake_levenshtein(word1, word2):
    return random()

def avg_list(l):
        return reduce(lambda x, y: x + y, l) / len(l)

for l in lists:
    score = []
    for w1 in l:
        for w2 in query:
            score.append(fake_levenshtein(w1, w2))
    print avg_list(score)

祝你好运。

撰写回答