Косинус Сходство между ключевыми словами - PullRequest
0 голосов
/ 13 декабря 2018

Я новичок в документировании сходства в python, и я не понимаю, как работать с некоторыми данными.По сути, я хочу получить косинусное сходство между диктовками, содержащими ключевые слова.

У меня есть такие подсказки, которые я получаю прямо из базы данных:

{'hat': 0.12, 'cat': 0.33, 'sat': 0.45}
{'rat': 0.22, 'bat':0.98, 'cat': 0.01}

Я запрашиваю базу данных и получаю данные в этом формате.Это каждый список ключевых слов и соответствующие им показатели / веса tf-idf.

{'keyword': tfidf_score}

Все, что я хочу сделать, - это получить косинусное сходство между этими двумя диктовками, взвешенное по значению tfidf.Когда я смотрел в Интернете, меня охватили разные библиотеки / модули Python, когда дело касалось сходства документов.Я понятия не имею, есть ли какая-то встроенная функция, в которую я могу просто передать эти виды json-объектов, должна ли я написать свою собственную функцию, которая использует весовые коэффициенты, или что-то еще.

Любая помощь приветствуется!

Спасибо!

1 Ответ

0 голосов
/ 14 декабря 2018

Библиотека SciKit Learn имеет довольно простую косинусную метрику.Хотя я согласен, что библиотека большая и может показаться ошеломляющей, вы можете погрузиться в мелкие детали.

Я не совсем уверен, чего вы хотите достичь, сравнивая вещи так, как вы предлагаете, но если вы пытаетесьчтобы получить косинусное сходство между документами , представленными в корпусе ключевыми словами , сначала нужно (как указывает Мармикшах) иметь векторное представление документов в терминах (измерениях) ключевых слов.

например,

import logging
import numpy
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

logging.basicConfig(level=logging.DEBUG,
                    filename='test.log', filemode='w')

dataset = ['the cat sat on the mat',
          'the rat sat in the hat',
          'the hat sat on the bat']


vectorizer = TfidfVectorizer()
X_tfidf = vectorizer.fit_transform(dataset)

# ...you say you are already at this point here...

sims = cosine_similarity(X_tfidf, X_tfidf)
rank = list(reversed(numpy.argsort(sims[0])))

logging.debug("\nTdidf: \n%s" % X_tfidf.toarray())
logging.debug("\nSims: \n%s", sims)
logging.debug("\nRank: \n%s", rank)

Обычно, например, при поиске вы сначала векторизуете корпус заранее, затем вы векторизуете поисковый запрос и получаете симы его представления:

Y_tfidf = vectorizer.fit_transform(search_query)
sims = cosine_similarity(Y_tfidf, X_tfidf)

Затемранжировать и выбирать / представлять главные документы.

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

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