Как рассчитать расстояние сходства между двумя списками строк - PullRequest
0 голосов
/ 20 мая 2019

У меня есть ввод, как показано ниже:

list1 = [['Search','engines','using','machine','learning','pattern','detections'],['machine','learning','helped','Google','automatically','sift','pages']]

list2 = ['Machine','learning','ever','evolving','technology']

Я пробовал ниже код:

def jaccard_similarity(list1, list2):
    intersection = len(list(set(list1).intersection(list2)))
    print(list(set(list1).intersection(list2)))
    union = (len(list1) + len(list2)) - intersection
    return float(intersection / union)

jaccard_similarity(input_list,input_list1)

Ошибка ниже:

TypeError: unhashable type: 'list'

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Я считаю, что вы хотите получить jaccard_similarity для каждого списка в list1.Если это так, просто прокрутите их.Также внесены небольшие исправления в строки в jaccard_similarity.

list1=[
    ['Search','engines','using','machine','learning','pattern','detections'], 
    ['machine','learning','helped','Google','automatically','sift','pages']
]
list2 = ['Machine','learning','ever','evolving','technology']

def jaccard_similarity(list1, list2):
    intersection = len(set(list1).intersection(list2)) #no need to call list here
    union = len(list1 + list2) - intersection #you only need to call len once here
    return intersection / union #also no need to cast to float as this will be done for you

for l in list1:
    print(jaccard_similarity(l, list2))

Или в понимании

similarities = [jaccard_similarity(l, list2) for l in list1]

Редактировать Вот гораздо более простой способ получитьjaccard_similarity кстати:

def jaccard_similarity(list1, list2):
    s1, s2 = set(list1), set(list2)
    return len(s1 & s2) / len(s1 | s2)
1 голос
/ 20 мая 2019

Вы можете вычислить индекс Жакара между двумя списками, используя вашу функцию:

jaccard_similarity(list1[0], list2)

возвращается:

['learning']
Out[7]: 0.09090909090909091

Вы также можете использовать цикл, чтобы применить свою функцию к различным подспискам в списке list1 и получить индекс Жакара между подсписками list1 и list2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...