编辑距离计算函数
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]
等等。
我在使用 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]
等等。