【问题标题】:Get similarity percent with sklearn hashing vectorizer使用 sklearn 散列矢量化器获取相似度百分比
【发布时间】:2014-08-31 23:40:12
【问题描述】:

我有 python 程序,它从几个站点获取文章并将它们存储在数据库中,就我而言,当我不想在数据库中添加新文章时,我应该检查它不是重复的文章。我想简单地通过获取相似性百分比并为其设置阈值来完成这项工作(例如,我说如果(两个字符串的相似性百分比)> 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])

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

【问题讨论】:

    标签: python scikit-learn vectorization


    【解决方案1】:

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

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

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

    这给出了-11 之间的相似性,因此您可以加一除以二得到百分比。

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 2021-01-14
      • 1970-01-01
      相关资源
      最近更新 更多