python 2 计算字符串 余弦相似度

def get_ord_list(str):
    return [ord(i) for i in str]

def calcu_approx(str1,str2):
    def dot(A,B):
        return (sum(a*b for a,b in zip(A,B)))
    def cosine_similarity(a,b):
        return dot(a,b) / ( (dot(a,a) **.5) * (dot(b,b) ** .5) )
    ord_list1 = get_ord_list(str1)
    ord_list2 = get_ord_list(str2)
    max_ord = max(max(ord_list1),max(ord_list2))+1
    print ord_list1,ord_list2,max_ord
    ord_dense_list1 = [0]*max_ord
    ord_dense_list2 = [0]*max_ord
    for i in ord_list1:
        ord_dense_list1[i] = 1
    for i in ord_list2:
        ord_dense_list2[i] = 1

    return cosine_similarity(ord_dense_list1,ord_dense_list2) 

s1 = u'我是中国人'
s2 = u'我是美国人'
print calcu_approx(s1,s2)  # 0.8
原文地址:https://www.cnblogs.com/sandy-t/p/11089027.html