前面写了一个用simhash 做算法相似度匹配。我觉得俩个算法都可以,但是一定要实践证明算法的稳定性,和模型的准确度。
因为开发比较急,所以没有去验证关键词加simhash 的具体准确情况,但是依据我来看会很不错。
后期我们上线的是余弦算法的相似度匹配。
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。
参考网上demo:
def similarity(s1, s2):
try:
if len(s1) > 0 and len(s2) > 0:
tmp = {}
for i in s1:
a = ord(i)
if 0x4DFF < a < 0x9FA6:
try:
tmp[a][0] = tmp[a][0] + 1
except:
tmp[a] = [1, 0]
for i in s2:
a = ord(i)
if 0x4DFF < a < 0x9FA6:
try:
tmp[a][1] = tmp[a][1] + 1
except:
tmp[a] = [0, 1]
a1 = 0
a2 = 0
a3 = 0
if len(tmp) > 0:
for i in tmp:
a1 += tmp[i][0] * tmp[i][1]
a2 += tmp[i][0] * tmp[i][0]
a3 += tmp[i][1] * tmp[i][1]
else:
return 0
return a1 / math.sqrt(a2 * a3)
except Exception as ex:
print(ex)
这个有一定的bug,需要调节。哈哈
需要完整项目demo请留言点赞关注。