我是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对象传递给我,是否应该编写自己的函数来使用权重等。
感谢您的帮助!
谢谢!
答案 0 :(得分:0)
SciKit Learn库具有相当简单的余弦度量。虽然我同意图书馆很大,但看起来似乎不知所措,您可以分成小部分。
我不能完全确定您通过按照建议的方式进行比较来达到的目的,但是如果您要获得语料库中以关键字表示的文档之间的余弦相似度,您首先需要(如Marmikshah所指出的)以关键字词(维度)对文档进行矢量表示。
例如
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。