2016-08-11 4 views
0

Я лексического несколько текстовых файлов и создал tf-idf матрицу из что:Формулирование запроса и ранг ответов с помощью косинус подобия Python

Token 1 Token 2 Token 3 
Doc 1 0.00.. 0.0002 0.0003 
Doc 2 0.00.. ...  ... 
Doc 3 ...  ...  ... 
... 

Как я теперь сформулировать запрос, скажем, для маркера 1 и маркера 3?

Как мне ранжировать их, используя подобие косинуса?

ответ

0

Если вы пытаетесь ранжировать их на Doc, я предлагаю использовать кортеж для Token. Я не уверен в математике позади косинусного сходства, но предполагая, что мы можем использовать функцию f(x,y), которая возвращает сходство косинусов между x и y, мы можем применить это к Token 1 to Token 2 и 3 согласно вашему предложению следующим образом:

list_with_scores = [] 
for i,doc in enumerate(Docs): 
    score1_3 = f(doc[0],doc[1]) 
    score1_3 = f(doc[0],doc[2]) 
    list_with_scores.append(i,score1_3, score_2_3,) 
#then sort by score1_3 
sortedlist1 = sorted(list_with_scores, key = lambda x:x[1]) 
#similary, sort by score2_3 
sortedlist2 = sorted(list_with_scores, key = lambda x:x[2]) 

Вы также можете сохранить маркерный знак в кортеже, если потребуется. И явное сохранение до score1_3 и score1_2 может быть удалено, это сделано для чтения, возможно, лучше оставить их как есть. Для получения дополнительной информации о сортировочной части, пожалуйста, проверьте Sort a list of tuples by 2nd item (integer value)

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