Вычислить косинусное сходство между словами

Если у нас есть два списка строк:

A = "Hello how are you? The weather is fine. I'd like to go for a walk.".split()
B = "bank, weather, sun, moon, fun, hi".split(",")

Слова в списке A составляют мою векторную основу слова. Как я могу рассчитать баллы схожести косинуса каждого слова в B?

Что я сделал до сих пор: я могу вычислить косинусное сходство двух целых списков с помощью следующей функции:

def counter_cosine_similarity(c1, c2):
    terms = set(c1).union(c2)
    dotprod = sum(c1.get(k, 0) * c2.get(k, 0) for k in terms)
    magA = math.sqrt(sum(c1.get(k, 0)**2 for k in terms))
    magB = math.sqrt(sum(c2.get(k, 0)**2 for k in terms))
    return dotprod / (magA * magB)

Но как мне интегрировать мой векторный базис и как тогда вычислить сходство между терминами в B?


person JohnD    schedule 05.11.2016    source источник
comment
Что вы подразумеваете под вычислением оценок косинусного сходства каждого слова в B? Как вы видите в параметрах для counter_cosine_similarity, это подобие относится к двум векторам, поэтому я предполагаю, что вы хотите, чтобы это было между двумя словами. Итак, вы хотите сходства для каждой пары слов, одно от A и одно от B?   -  person Rory Daulton    schedule 05.11.2016