亲测对于海量计算,采用simhash相似度算法会快很多。
参考:https://blog.csdn.net/wxgxgp/article/details/104146034
https://blog.csdn.net/Trisyp/article/details/113623966
1. 余弦相似度
略。
1. 获得corpus语料库,然后转为向量。
2. 调包计算余弦相似度。
2. simhash相似度
from simhash import Simhash
def simhash_demo(text_a, text_b):
"""
求text_a和text_b的文本相似度
"""
a_simhash = Simhash(text_a)
b_simhash = Simhash(text_b)
max_hashbit = max(len(bin(a_simhash.value)), len(bin(b_simhash.value)))
# 汉明距离
distince = a_simhash.distance(b_simhash)
# print(distince)
similar = 1 - distince / max_hashbit
return similar
t1 = ['遨游', 'AI', '专注', '一站式', '游戏']
t2 = ['遨游', 'AI', '专注', '二站式', '游戏13', '放大了发', 'FdafA', '放大上课']
simhash_demo(t1, t2)
>>> 0.6515151
ps:t1可以是分词后的list,也可以是直接一句str字符串。
再DataFrame上应用:输入句子input_t_cut,计算每篇内容与input_t_cut的相似度:
articles['相似度'] = articles['标题内容关键词'].apply(lambda x: simhash_demo(x, input_t_cut))
articles.sort_values('相似度', ascending=False).head(60)