如何计算 pandas 数据框上基于字母的相似度

How to count letter based similarity on pandas dataframe

这是我的第一个数据框df1

Id   Text
1    dFn
2    fiqe
3    raUw

这是我的第二个数据框df2

Id   Text
1    yuw
2    dnag

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

       1      2      3
1      0      0   0.66  
2    0.5      0   0.25

注:

0 值在 (1,1), (2,1) 和 (3,2) 因为没有字母相似

0.25 (3,1) 中的值是因为只有来自 raUw 的 1 个字母在 4 个字母“dnag”中可用(1/4 等于 0.25)

0.5 4个字母中有2个相似

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

IIUC,一种选择是在嵌套列表理解中使用 set.intersection

out = pd.DataFrame([[len(set(x.lower()) & set(y.lower())) / len(x) for y in df1['Text'].tolist()] for x in df2['Text'].tolist()])

输出:

     0    1         2
0  0.0  0.0  0.666667
1  0.5  0.0  0.250000