2017-10-05 17 views
3

私はデータセットを持っています。最初の(A)は洗練された名前の機器のリストです。 2番目は、より幅広い機器カテゴリ(B)のリストです。最初のリストを文字列比較を使用してグループ化する必要があります。私はこれが完璧ではないことを知っています。複数値の文字列比較python

リストAの各エンティティについて、リストBの各エンティティのレベンショニング距離を設定したいと思います。最高のスコアを持つリストBのレコードは、そのデータポイントを割り当てるグループになります。

私はPythonでは非常に錆びていて、2つの文字列値の間の距離を得るためにFuzzyWuzzyで遊んでいます。しかし、私が必要とするものを生み出すために各リストをどのように反復するのかは分かりません。

私はちょうど各データセットのリストを作成し、それぞれのためのかなり基本的なループを書くだろうと推測しました - しかし、私は少し錆びていて幸運を持っていないと言いました。

ご協力いただければ幸いです!私がこれを行うことを可能にする別のパッケージがある場合(ファジーではない) - 私は提案をうれしく思います。

+0

これを見て、それは多くの助けになります。 Ned Batchelder - ネイティブのようなループ:while、iterators、generators 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に名前を追加します。