关键词间的余弦相似性

2024-05-19 20:53:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python中文档相似性的新手,对如何处理一些数据感到困惑。基本上,我想得到包含关键字的dict之间的余弦相似性。在

我有这样的口述,我直接从数据库中得到:

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

我查询数据库并以这种格式返回数据。这些是每个关键字的列表及其各自的tf idf分数/权重。在

^{pr2}$

我只想得到这两个dicts之间的余弦相似性,用tfidf分数加权。在网上看,当谈到文档相似性时,我被所有不同的python库/模块淹没了。我不知道是否有一些内置函数可以传递这些类型的json对象,是否应该编写自己的函数来使用权重,或者是什么。在

感谢任何帮助!在

谢谢你!在


Tags: 数据函数文档数据库hat关键字相似性sat
1条回答
网友
1楼 · 发布于 2024-05-19 20:53:52

SciKit学习库有一个相当简单的余弦度量。虽然我同意这个图书馆很大,而且看起来势不可挡,但你可以从小部分着手。在

我不太清楚你想用你建议的方式来比较事物来达到什么目的,但是如果你想在语料库中用关键字来表示文档之间的余弦相似性,你首先需要(正如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)

通常情况下,在搜索中,你首先要预先对语料库进行向量化,然后对搜索查询进行向量化,得到其表示形式的sim:

^{pr2}$

然后对排名靠前的文档进行排序和挑选/展示。在

我修改了这个X,Y来交叉引用语料库中的文档,而不是上面的X,X

相关问题 更多 >