使用sklearn哈希向量化器获取相似度百分比
我有一个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])
我该如何计算两个哈希向量的相似度百分比(比如使用余弦距离),以及如何把它转换成百分比呢?谢谢大家的回答。
1 个回答
3
在HashingVectorizer
的默认设置下(特别是norm="l2"
),这两个向量之间的余弦相似度是
sim = (article1_vector * article2_vector.T).A[0, 0]
其实这就是一个点积运算,只不过用了些小技巧来处理SciPy稀疏矩阵的格式。
这个相似度的范围在-1
到1
之间,所以你可以把它加上1再除以2,这样就能得到一个百分比。