2017-10-05 116 views
3

我有一組數據。第一個(A)是具有複雜名稱的設備列表。第二個是更廣泛的設備類別列表(B) - 我必須將第一個列表分組爲使用字符串比較。我知道這不會是完美的。多個值的字符串比較python

對於列表A中的每個實體 - 我想爲列表B中的每個實體建立levenshtein距離。列表B中具有最高分數的記錄將是我將要分配該數據點的組。

我在python中很生鏽 - 我正在玩FuzzyWuzzy來獲得兩個字符串值之間的距離。然而 - 我無法弄清楚如何迭代每個列表來產生我需要的東西。

我推測我只是爲每個數據集創建一個列表併爲每個數據集寫一個非常基本的循環 - 但就像我說我有點生疏,沒有任何運氣。

任何幫助將不勝感激!如果有另一個包可以讓我做到這一點(而不是模糊) - 我很樂意提出建議。

+0

看着這個,它會有很大的幫助。 Ned Batchelder - 像本地人一樣循環:while,for迭代器,生成器https://www.youtube.com/watch?v=EnSu9hHGq5o – diek

回答

4

它看起來像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