3

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

例子:

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)

我找到了一个可以帮助我的库但我在想你是否有其他建议。

4

1 回答 1

5

如果您正在寻找一种方法来查找字符串之间的相似性,这个SO question建议将Levenshtein distance作为一种方法。

有一个现成的解决方案,它也存在于自然语言工具包库中。

天真的整合将是(我使用随机只是为了得到一个结果。这显然没有意义):

#!/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)

祝你好运。

于 2014-03-11T10:14:10.720 回答