python - 两个带有字符串的列表的相似度分数

标签 python comparison string-comparison similarity fuzzy-comparison

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

例子:

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 , 但我在想你是否有任何其他建议。

最佳答案

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

有一个solution准备好了,它也存在于Natural Language Tool Kit中图书馆。

naive 集成将是(我使用随机只是为了得到一个结果。这显然没有意义):

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

祝你好运。

关于python - 两个带有字符串的列表的相似度分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321831/

相关文章:

javascript - 什么可能导致 Javascript 中的这种随机比较行为?

javascript - 如何区分对象文字和其他 Javascript 对象?

mysql - 在 MySQL 中比较字符串与 'greater than' 和 'less than' 是否安全?

python - 低于 400 万的偶数斐波那契数之和 - Python

python Redis : DUMP payload version or checksum are wrong

sql - 数据库比较工具

perl - 如何在 Perl 中比较两个字符串?

c++ - 将版本作为字符串进行比较

python - python中for循环的问题

python - 如何使用 Python 知道用户是否按下了 Enter 键