我有一组数据。第一个(A)是具有复杂名称的设备列表。第二个是更广泛的设备类别(B)的列表 - 我必须将第一个列表分组到使用字符串比较。我知道这不会是完美的。
对于列表A中的每个实体 - 我想为列表B中的每个实体建立levenshtein距离。列表B中得分最高的记录将是我分配给它的组。数据点。
我在python中非常生疏 - 我正在使用FuzzyWuzzy来获取两个字符串值之间的距离。但是 - 我无法弄清楚如何遍历每个列表以产生我需要的东西。
我假设我只是为每个数据集创建一个列表,并为每个数据集写一个非常基本的循环 - 但就像我说的那样,我有点生疏,没有运气。
任何帮助将不胜感激!如果有另一个包允许我这样做(不是模糊的) - 我很乐意接受建议。
答案 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
。