5

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

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

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

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

任何帮助将不胜感激!如果有另一个包可以让我这样做(不是 Fuzzy) - 我很高兴接受建议。

4

1 回答 1

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与该匹配相关联的名称中。

于 2017-10-05T01:49:35.177 回答