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