我有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])
如何获得两个哈希向量的相似度百分比(例如余弦距离)以及如何将其转换为百分比?谢谢你的回答。
答案 0 :(得分:3)
使用HashingVectorizer
的默认设置(特别是norm="l2"
),这两个向量之间的余弦相似度为
sim = (article1_vector * article2_vector.T).A[0, 0]
这实际上只是一个带有一些技巧的点积,可以摆脱SciPy稀疏矩阵格式。
这会在-1
和1
之间产生相似性,因此您可以添加一个并除以2来获得百分比。