首页 > 解决方案 > 有没有办法为余弦相似度高于 0.8 的名称分配唯一值?

问题描述

我能够计算不同名称之间的余弦相似度。之后,我想为那些相似度 > 0.8 的名称分配唯一值

我尝试创建一个包含名称作为键并分配唯一值作为值的字典

dict1 = {}

ui = 0

def word2vec(word):
    from collections import Counter
    from math import sqrt
    cw = Counter(word)
    sw = set(cw)
    lw = sqrt(sum(c*c for c in cw.values()))
    return cw, sw, lw
def cosdis(v1, v2):
    common = v1[1].intersection(v2[1])
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2]
list1 = list(df['Name'].unique())
for m in list1:
    for i in range(0, len(list1)):   
        vec1 = word2vec(m)
        vec2 = word2vec(list1[i])
        x = cosdis(vec1,vec2)
        if(x >=.80):
            dict1[m, list[i]] = 'A' + str(ui)                       
        else:
            pass
        ui = ui + 1                            

我希望所有相似的名称在字典中具有相同的值。

标签: pythonpandasmachine-learningnlp

解决方案


推荐阅读