基于Max Levenshtien距离的最可能的单词

时间:2018-04-05 19:49:17

标签: python python-3.x pandas levenshtein-distance fuzzywuzzy

我有list个字词:

lst = ['dog', 'cat', 'mate', 'mouse', 'zebra', 'lion']

我还有一个pandas数据框:

df = pd.DataFrame({'input': ['dog', 'kat', 'leon', 'moues'], 'suggested_class': ['a', 'a', 'a', 'a']})

input   suggested_class
dog          a
kat          a
leon         a
moues        a

我想在suggested_class列中填入lst中与input列中的单词具有最高levenshtein距离的值。我正在使用fuzzywuzzy包来计算它。

预期输出为:

input   suggested_class
dog          dog
kat          cat
leon         lion
moues        mouse

我知道可以使用像autocorrect这样的df.suggested_class = [autocorrect.spell(w) for w in df.input]包来实现某些功能,但这对我的情况不起作用。

我尝试过这样的事情(使用from fuzzywuzzy import fuzz):

for word in lst:
    for n in range(0, len(df.input)):
        if fuzz.ratio(df.input.iloc[n], word) >= 70:
            df.suggested_class.iloc[n] = word
        else:
            df.suggested_class.iloc[n] = "unknown"

仅适用于设定距离。我已经能够通过以下方式捕捉最大距离:

max([fuzz.ratio(df.input.iloc[0], word) for word in lst])

但是我很难将其与来自lst的单词联系起来,然后随后用该单词填充suggested_class

1 个答案:

答案 0 :(得分:2)

您提到fuzzywuzzy

from fuzzywuzzy import process
df['suggested_class']=df.input.apply(lambda x : [process.extract(x, lst, limit=1)][0][0][0])

df
Out[1365]: 
   input suggested_class
0    dog             dog
1    kat             cat
2   leon            lion
3  moues           mouse