编辑距离计算函数

Function for levenshtein distance calculations

我在使用 Levenshtein 包时创建了一个函数来计算 python 中两个变量的 Levenshtein 距离 (L.distance)。但是,当我尝试应用该函数时出现类型错误 ("distance expected two Strings or two Unicodes")。但是,我用来计算 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。

这是你应该做的方式:

# 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是你要比较的panda.Series(lst2是另一个)
  • len(lst1) returns 系列的长度作为整数值(在此示例中,它的计算结果为 4)
  • range(len(lst1))(在本例中为 range(4))returns 整数列表,从 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] 等等。