假设我有一个列表:
person_name = ['zakesh', 'oldman LLC', 'bikash', 'goldman LLC', 'zikash','rakesh']
我试图以这种方式对列表进行分组,以使两个字符串之间的Levenshtein距离最大。为了找出两个单词之间的比例,我使用了python包Fuzzywuzzy。
例子 :-
>>> from fuzzywuzzy import fuzz
>>> combined_list = ['rakesh', 'zakesh', 'bikash', 'zikash', 'goldman LLC', 'oldman LLC']
>>> fuzz.ratio('goldman LLC', 'oldman LLC')
95
>>> fuzz.ratio('rakesh', 'zakesh')
83
>>> fuzz.ratio('bikash', 'zikash')
83
>>>
我的最终目标:
我的最终目标是对单词进行分组,使它们之间的Levenshtein距离超过80%?
我的清单应如下所示:-
person_name = ['bikash', 'zikash', 'rakesh', 'zakesh', 'goldman LLC', 'oldman LLC'] because the distance between `bikash` and `zikash` is very high so they should be together.
码:
我正在尝试通过排序来实现这一点,但关键功能应该是fuzz.ratio
。下面的代码无法正常工作,但是我正从这个角度解决问题。
from fuzzywuzzy import fuzz
combined_list = ['rakesh', 'zakesh', 'bikash', 'zikash', 'goldman LLC', 'oldman LLC']
combined_list.sort(key=lambda x, y: fuzz.ratio(x, y))
print combined_list
谁能帮我把这些词结合起来,使它们之间的Levenshtein距离超过80%?
这将名称分组
from fuzzywuzzy import fuzz
combined_list = ['rakesh', 'zakesh', 'bikash', 'zikash', 'goldman LLC', 'oldman LLC']
combined_list.append('bakesh')
print('input names:', combined_list)
grs = list() # groups of names with distance > 80
for name in combined_list:
for g in grs:
if all(fuzz.ratio(name, w) > 80 for w in g):
g.append(name)
break
else:
grs.append([name, ])
print('output groups:', grs)
outlist = [el for g in grs for el in g]
print('output list:', outlist)
生产
input names: ['rakesh', 'zakesh', 'bikash', 'zikash', 'goldman LLC', 'oldman LLC', 'bakesh']
output groups: [['rakesh', 'zakesh', 'bakesh'], ['bikash', 'zikash'], ['goldman LLC', 'oldman LLC']]
output list: ['rakesh', 'zakesh', 'bakesh', 'bikash', 'zikash', 'goldman LLC', 'oldman LLC']
如您所见,名称已正确分组,但顺序可能不是您想要的。
问题内容: 在Python + Sqlite中是否有可用的字符串相似性度量,例如与模块有关? 用例示例: 此查询应匹配ID为1的行,但不匹配ID为2的行: 如何在Sqlite + Python中做到这一点? 关于我到目前为止发现的注释: 该Levenshtein距离,即单字符编辑(插入,删除或替换)的最小数量需要改变一个字到另一个,可能是有用的,但我不知道是否SQLite中存在的正式实施(我看到一
我必须将0到1之间的Levenshtein距离归一化。我看到不同的变化漂浮在所以。 null https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/similary/levenshteIndistance.html
我使用Levenshtein距离算法将作为用户输入提供的公司名称与已知公司名称数据库进行比较,以找到最接近的匹配项。算法本身工作正常,但我想构建一个偏差,这样如果字符串的初始部分匹配,编辑距离就会被认为更低。 例如,如果搜索条件是“ABCD”,那么“ABCD Co.”和“XYX ABCD”具有相同的编辑距离。但是,我想增加一个事实,即第一个字符串的开头部分比第二个字符串更符合搜索条件。
我使用Levenshtein算法来查找两个字符串之间的相似性。这是我正在制作的程序的一个非常重要的部分,所以它需要有效。问题是算法没有发现以下示例相似: CONAIR AIRCON 编辑:我还研究了“Damerau-Levenshtein”算法,它增加了换位。问题是这种转换只针对相邻的字符(而不是多个字符)。
我正在使用AWS Athena,我正在尝试合并具有特定列且levenshtein_distance值小于5的所有行,并将归一化百分比相加。 该表的结构如下:
我有一个web和一个使用SQL Server的移动字典应用程序。我试图实现一个简单版本的“你的意思”功能。如果用户输入的短语在数据库中不存在,我需要提出建议。
我想从多个文件做数百万条记录的模糊匹配。我为此确定了两种算法:Jaro-Winkler和Levenshtein编辑距离。
另外,我只是在写一篇论文,我不知道如何划分它--我应该先解释Levenshtein距离,然后解释Wagner-Fisher算法,还是两者兼而有之?我有点困惑。