多个值python的字符串比较

时间:2017-10-05 01:37:16

标签: python levenshtein-distance fuzzywuzzy

我有一组数据。第一个(A)是具有复杂名称的设备列表。第二个是更广泛的设备类别(B)的列表 - 我必须将第一个列表分组到使用字符串比较。我知道这不会是完美的。

对于列表A中的每个实体 - 我想为列表B中的每个实体建立levenshtein距离。列表B中得分最高的记录将是我分配给它的组。数据点。

我在python中非常生疏 - 我正在使用FuzzyWuzzy来获取两个字符串值之间的距离。但是 - 我无法弄清楚如何遍历每个列表以产生我需要的东西。

我假设我只是为每个数据集创建一个列表,并为每个数据集写一个非常基本的循环 - 但就像我说的那样,我有点生疏,没有运气。

任何帮助将不胜感激!如果有另一个包允许我这样做(不是模糊的) - 我很乐意接受建议。

1 个答案:

答案 0 :(得分:5)

看起来process.extractOne功能正是您正在寻找的功能。一个简单的用例就像是

from fuzzywuzzy import process
from collections import defaultdict

complicated_names = ['leather couch', 'left-handed screwdriver', 'tomato peeler']
generic_names = ['couch', 'screwdriver', 'peeler']

group = defaultdict(list)   

for name in complicated_names:
    group[process.extractOne(name, generic_names)[0]].append(name)

defaultdict是一个包含所有键的默认值的字典。

我们遍历所有复杂的名称,使用fuzzywuzzy查找最接近的匹配项,然后将名称添加到与该匹配项关联的list