Библиотека 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.