文字列しかない場合は、セットを使用しないでください。
clusters = defaultdict(set)
しかし、これはあなたのループでset.add
にlist.append
を変更する必要があります:あなたは、あなたのマッピングの設定のデフォルト値を使用することができます
Target = set(Target_Column.tolist())
。
ただし、あなたのコードの代わりにpythonicの代替があります。
私はおそらく言葉からその接続のセットへのマッピングをその場で生成します。ここで
はwords
を想定した例であるすべての単語のset
次のとおりです。
clusters = {w1: set(w2 for w2 in words if distance(w1, w2) <= threshold) for w1 in words}
ライブ例:
:
>>> distance = lambda x, y: abs(len(x) - len(y))
>>> words = set("abc def abcd abcdefghijk abcdefghijklmnopqrstuv".split())
>>> threshold = 3
>>> for cluster, values in clusters.items():
... print cluster, ": ", ", ".join(values)
...
abcd : abcd, abc, def
abc : abcd, abc, def
abcdefghijk : abcdefghijk
abcdefghijklmnopqrstuv : abcdefghijklmnopqrstuv
def : abcd, abc, def
がしきい値を増やすと、我々はすべての単語のための一つの大きな "クラスタ" を取得
>>> threshold = 100
>>> clusters = {w1: set(w2 for w2 in words if distance(w1, w2) <= threshold) for w1 in words}
>>> for cluster, values in clusters.items():
... print cluster, ": ", ", ".join(values)
...
abcd : abcd, abc, abcdefghijk, abcdefghijklmnopqrstuv, def
abc : abcd, abc, abcdefghijk, abcdefghijklmnopqrstuv, def
abcdefghijk : abcd, abc, abcdefghijk, abcdefghijklmnopqrstuv, def
abcdefghijklmnopqrstuv : abcd, abc, abcdefghijk, abcdefghijklmnopqrstuv, def
def : abcd, abc, abcdefghijk, abcdefghijklmnopqrstuv, def
6つの単語のリストがあるとします。Target =( 'Ajay'、 'Tree'、 'Man'、 'Tiger' 'Ajad'、 'Ajad'、 'Trend')ループは最初の単語から始まり、ループクラスタ1を使用してクラスタを作成すると 'Ajay'、 'Ajac'となり、ループが4番目のインデックスに達すると、 'Ajac'、 'アジェイ ' 1つのオプションは、1つのクラスタに追加した後にその単語を削除することですが、エラーインデックスが範囲外です。 –
@AjayJadhav私は例を追加しました。 –
**私はLevenshteinから距離を取っています**from Levenshtein輸入距離 –