使用sklearn散列矢量化器获得相似度百分比

时间:2014-08-29 18:17:22

标签: python scikit-learn vectorization

我有python程序,从少数网站获取文章并将它们存储在数据库中,在我的情况下,当我不想在数据库中添加新文章时,我应该检查它不是重复的文章。我想简单地通过获得相似度百分比并为其设置阈值来做这项工作(例如,我说if(相似度的两个字符串的百分比)> 70%然后新文章是重复的)

我的问题是找到相似性的百分比。现在我使用difflib和SequenceMatcher类:

diff = SequenceMatcher(
   None, article1.content, article2.content).ratio()

但这不对,我认为使用HashingVectorizer更适合这种情况(?):

vectorizer = HashingVectorizer(n_features=(2**18))
article1_vector = vectorizer.transform([article1.content])
article2_vector = vectorizer.transform([article2.content])

如何获得两个哈希向量的相似度百分比(例如余弦距离)以及如何将其转换为百分比?谢谢你的回答。

1 个答案:

答案 0 :(得分:3)

使用HashingVectorizer的默认设置(特别是norm="l2"),这两个向量之间的余弦相似度为

sim = (article1_vector * article2_vector.T).A[0, 0]

这实际上只是一个带有一些技巧的点积,可以摆脱SciPy稀疏矩阵格式。

这会在-11之间产生相似性,因此您可以添加一个并除以2来获得百分比。