如何计算两个 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) 中的值是因为 Bersatu
和 Kita' (Id
1on
df2is avalilable in Id
3on
df1 `
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
这是我的第一个数据框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) 中的值是因为 Bersatu
和 Kita' (Id
1on
df2is avalilable in Id
3on
df1 `
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