在Python中如何计算字符串的Jaro-Winkler距离矩阵?在
我有大量手工输入的字符串(名称和记录编号),我试图在列表中找到重复项,包括拼写可能略有不同的重复项。一个response to a similar question建议使用Scipy的pdist函数和一个自定义的距离函数。我尝试用Levenshtein包中的jaro_winkler函数实现这个解决方案。问题是jaro_winkler函数需要字符串输入,而pdict函数似乎需要2D数组输入。在
示例:
import numpy as np
from scipy.spatial.distance import pdist
from Levenshtein import jaro_winkler
fname = np.array(['Bob','Carl','Kristen','Calr', 'Doug']).reshape(-1,1)
dm = pdist(fname, jaro_winkler)
dm = squareform(dm)
预期输出-如下所示:
^{pr2}$实际误差:
jaro_winkler expected two Strings or two Unicodes
我假设这是因为jaro_winkler函数看到的是一个ndarray而不是一个字符串,而且我不确定如何在pdist函数的上下文中将函数输入转换为字符串。在
有人有什么建议可以让它发挥作用吗?提前谢谢!在
这里有一个既不需要numpy也不需要scipy的简洁解决方案:
您需要包装距离函数,就像我在下面的示例中演示的levenstein distance
对于任何有类似问题的人—我刚刚找到的一个解决方案是从pdist函数中提取相关代码,并在jaro_winkler函数输入中添加一个[0],以从numpy数组中调用字符串。在
示例:
即使这个算法是有效的,我仍然想知道是否有一个“正确”的计算机科学方法来处理pdist函数。谢谢,希望这能帮助别人!在
相关问题 更多 >
编程相关推荐