莱文施泰因距离计算功能

时间:2019-06-24 18:10:31

标签: python levenshtein-distance

当使用Levenshtein包时,我创建了一个函数来计算python中两个变量的Levenshtein距离(L.distance)。但是,当我尝试应用该函数时,出现TypeError(“距离期望为两个字符串或两个Unicode”)。但是,我用来计算L.distance的两个变量都是字符串。

我尝试了一个for循环,然后在看了其他实现L.distance的在线脚本后将其取出。我创建了一个仅使用单个词进行比较的测试数据框,因为我认为这可能是个问题(我正在比较可能有很多词而不只是单数词的公司名称)

lst=['bear', 'tomato', 'green', 'snake']
lst2 =['baear', 'tomato', 'grean', 'snake']
dftest=pd.DataFrame(list(zip(lst,lst2)), columns =['lst1', 'lst2'])

result= []
def distancefinder(string1, string2):
    for string1, string2 in something:
        stringdist = lv.distance(string1, string2)
        result.append(stringdist)
    return (result)
dftest['lv_matchscore'] = distancefinder(dftest.lst1, dftest.lst2)

预期输出是两个变量的计算出的L.distance。

1 个答案:

答案 0 :(得分:0)

这是您应该这样做的方式:

# Imports
import pandas as pd
import Levenshtein as lv

lst=['bear', 'tomato', 'green', 'snake']
lst2 =['baear', 'tomato', 'grean', 'snake']
dftest=pd.DataFrame(list(zip(lst,lst2)), columns =['lst1', 'lst2'])

result= []
def distancefinder(lst1, lst2):
    # Create the list you will populate with the results
    results = []
    # Loop through your records (Levenshtein uses strings, not pandas.Series)
    for i in range(len(lst1)):
        # Calculate the distance 
        stringdist = lv.distance(lst1[i], lst2[i])
        # Append the result
        results.append(stringdist)
    # Return the results list
    return results
dftest['lv_matchscore'] = distancefinder(dftest.lst1, dftest.lst2)

编辑

for i in range(len(lst1)):

  • lst1是您要比较的熊猫系列(lst2是另一个)
  • len(lst1)以整数值返回序列的长度(在此示例中,结果为4)
  • range(len(lst1))(在这种情况下为range(4))返回一个整数列表,从0开始到3的整数。因此:[0,1,2,3]
  • 在这种情况下,
  • for i in range(len(lst1))将是for i in [0, 1, 2, 3]i将用作索引,以从要比较的系列中获取每个元素。在第一个迭代中,您将比较lst1[0]lst2[0];第二个是lst1[1]lst2[1],依此类推。