2015-04-07 5 views
0

Я определяю функцию, которая берет список слов и возвращает информацию о словах в списке, которые имеют ненулевое, косинус-сходство между собой (вместе со значением подобия).Косинусное сходство между двумя словами в списке

Может ли кто-нибудь помочь мне с этим. Я думал, могу ли я получить предварительно вычисленный векторный файл word2vec, тогда это было бы очень полезно, но в Интернете его нет.

+0

Можете ли вы показать, что вы пробовали? –

+0

https://code.google.com/p/word2vec/ имеет указатели на несколько предварительно вычисленных векторных коллекций для загрузки. – tripleee

ответ

0

Вы могли бы определить эти две функции

def word2vec(word): 
    from collections import Counter 
    from math import sqrt 

    # count the characters in word 
    cw = Counter(word) 
    # precomputes a set of the different characters 
    sw = set(cw) 
    # precomputes the "length" of the word vector 
    lw = sqrt(sum(c*c for c in cw.values())) 

    # return a tuple 
    return cw, sw, lw 

def cosdis(v1, v2): 
    # which characters are common to the two words? 
    common = v1[1].intersection(v2[1]) 
    # by definition of cosine distance we have 
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2] 

и использовать их как в этом примере

>>> a = 'safasfeqefscwaeeafweeaeawaw' 
>>> b = 'tsafdstrdfadsdfdswdfafdwaed' 
>>> c = 'optykop;lvhopijresokpghwji7' 
>>> 
>>> va = word2vec(a) 
>>> vb = word2vec(b) 
>>> vc = word2vec(c) 
>>> 
>>> print cosdis(va,vb) 
0.551843662321 
>>> print cosdis(vb,vc) 
0.113746579656 
>>> print cosdis(vc,va) 
0.153494378078 

BTW, то word2vec что вы упоминаете в теге совсем другое дело, что требует один из нас занимает много времени и обязательств для изучения этого вопроса и догадывается, что, я не тот ...

+0

Большое спасибо за то, что он объяснил это так легко. Но я сомневаюсь, что мы не можем сделать то же самое, что и мы, для запроса и документа. Я хочу сказать, сначала найти частоту письма для письма, а затем найти частота обратного слова. После этого вычислите угол cos? .. Просто любопытно узнать .. – UserP

+0

Нет, то, что я показал, сделано на лексическом уровне, в реальном материале, скажем, 'word2vec' или' 'python' free library [' gensim'] (https://radimrehurek.com/gensim/index.html), работайте на семантическом уровне. Если бы я был вами, я попробую расследовать и, в конечном счете, изучить библиотеку gensim, это оболочка Python, построенная над «word2vec» – gboffi

+0

. Хорошо, что инструкции, которые я читаю для моего кода, говорят «Напишите функцию, которая принимает список слов и возвращает информацию о слова в списке, которые имеют ненулевое косинусное сходство между собой, а также значение подобия. » Значит ли это означает семантическое сходство или просто нормальное, которое вы предложили? – UserP

Смежные вопросы