假设我有一个列表:
person_name = ['zakesh', 'oldman LLC', 'bikash', 'goldman LLC', 'zikash','rakesh']
我正尝试以这样的方式对列表进行分组,以便两个字符串之间的 萊文斯坦距離 最大。为了找出两个单词之间的比率,我使用了一个 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%?
cmp
传递给sort
(及相关函数)。但是在Python 3中已经将其删除,但有一个解决方法:参见cmp_to_key。 - PM 2Ring