如何计算两个 pandas 数据帧之间的单词相似度

How to count word similarity between two pandas dataframe

这是我的第一个数据框df1

Id   Text
1    Asoy Geboy Ngebut
2    Asoy kita Geboy 
3    Bersatu kita Teguh

这是我的第二个数据框 df2

Id   Text
1    Bersatu Kita
2    Asoy Geboy Jalanan

相似度矩阵,列是 Id 来自 df1,行是 Id 来自 df2

       1      2      3
1      0   0.33      1  
2   0.66   0.66      0

注:

0 (1,1) 和 (3,2) 中的值,因为没有相似的文本

1 (3,1) 中的值是因为 BersatuKita' (Id 1ondf2is avalilable in Id3ondf1 `

0.33 3 个词中有 1 个相似

0.66 是因为 3 个词中有 2 个相似

IIUC,你需要计算一个set交集:

l1 = [set(x.split()) for x in df1['Text'].str.lower()]
l2 = [set(x.split()) for x in df2['Text'].str.lower()]

pd.DataFrame([[len(s1&s2)/len(s1) for s1 in l1] for s2 in l2],
             columns=df1['Id'], index=df2['Id'])

输出:

Id         1         2         3
Id                              
1   0.000000  0.333333  0.666667
2   0.666667  0.666667  0.000000

注意。请注意,分母上的条件并不完全清楚,对于 {teguh, kita, bersatu} vs {kita, bersatu} 我算 2/3 = 0.666