为什么fuzzy.ratio对于完全相同的字符串不是100?

时间:2016-11-03 00:08:40

标签: python pandas string-matching fuzzywuzzy

我有两个数据帧df1和df2。两个数据框都有一个包含movie_names的列。我试图将df1中的movie_name1与df2中的movie_name2进行匹配。 movie_name1的值类似于The Dark Knight Rises,Spider-Man 3。 movie_name2的值类似于The Dark Knight Rises,Spider-Man 3.

我们看到movie_name1中所有电影的末尾都有一个额外的字母。所以在匹配之前,我正在移除帽子额外的字母,剥离空间然后计算fuzz.ratio。

这就是我执行操作的方式 -

import pandas as pd
from fuzzywuzzy import fuzz


df1['movie_name1'] = df1['movie_name1'].str.replace( 'Â',"")
df1['movie_name1'] = df1['movie_name1'].apply(lambda x: x.strip()) 
df1['movie_name1_first_letter'] = df1['movie_name1'].astype(str).str.slice(0,1)
df2['movie_name2_first_letter'] = df2['movie_name2'].astype(str).str.slice(0,1)
df_result = pd.merge(df1,mdf2, left_on='movie_name1_first_letter',right_on=
'movie_name2_first_letter')
df_result['Fuzz'] = df_result.apply(lambda x: fuzz.ratio(x['movie_name1'], 
x['movie_name2']) , axis=1)

示例数据:

df1 = pd.DataFrame({'movie_name1': ['127 hoursÂ','The Dark Knight RisesÂ',
'SpiderManÂ']})

df2 = pd.DataFrame({'movie_name2': ['The Dark Knight Rises','SpiderMan','127 hours'
]})

示例结果:

movie_name1   movie_name2    Fuzz
127 hours     127 hours      90

即使我在计算fuzz.ratio之前执行上述操作,仍然完全相同字符串的fuzz.ratio值不是100.

我的分析显示两部电影名称之间总是存在长度2的差异。例如:movie_name1中“127小时”的长度为11,而movie_name2中同一电影的长度为9.这适用于所有电影。

为什么会这样?是因为那封信'''?我该怎么做才能解决这个问题?

0 个答案:

没有答案