Храните термины кластеров в переменных, созданных с использованием словаря в Python - PullRequest
0 голосов
/ 15 мая 2018

У меня есть скрипт на Python, в котором я просмотрел список образцов, извлек функции и сгруппировал функции документа. Я хочу сохранить каждый кластер в переменную, созданную в самом цикле.

Для этого я объявил словарь и создал набор переменных с именами cluster0, cluster1, cluster2 и т. Д. И сохранил список слов в каждом кластере для новых созданные переменные, используя следующий метод.

    d = {}
    feature_set =[]

    if(len(filtered_terms)!=0):
        for m in filtered_terms:
            print(' %s' % m, end='')
            feature_set.append(m)
        for w in cluster_terms:
            for b in filtered_terms:
                if (w != b):
                    print(' %s' % w, end='')
                    feature_set.append(w)
    else:
        for h in cluster_terms:
            print(' %s' % h, end='')
            feature_set.append(h)

    for f in range(0, i+1):
        #globals()['string%s' % f] = feature_set
        d["cluster{0}".format(f)] = feature_set

    print()
print("Clusters stored in a dictionary of Variables")

print ()
for k in d:
    print (k)
    print (d[k])

Исходные данные кластера отображаются следующим образом.

Top terms per cluster:
Cluster 0: wilson adam presid cleveland roosevelt lincoln grant monro fillmor parti
Cluster 1: instrument flute drum drum flute instrument bar bar sound sound instrument trumpet trumpet music music concert concert flute
Cluster 2: string cello violin instrument violin violin violin cello cello cello string string string string string string bow bow bow bow instrument instrument instrument cello cello cello violin violin violin music music music music instrument instrument instrument
Cluster 3: languag chines german italian arab spanish spoken swahili ghana vietnames
Cluster 4: newton string kangaroo guitar ford singapor penguin uruguay romania piano
Cluster 5: eleph beetl polar leopard speci wolv bear wolf fur

Игнорируя повторение слов в кластере 2 , я попытался напечатать список слов, хранящихся в переменных, созданных с использованием словаря d, используя следующий метод, который также показан выше.

for k in d:
    print (k)
    print (d[k])

Но я получаю следующий вывод, где имена переменных правильно создаются как cluster0, cluster1, cluster2 и т. Д., Но сохраняется только содержимое кластера 5 (последний кластер в исходном кластере) для всех переменных.

выход

cluster2
[u'eleph', u'beetl', u'polar', u'leopard', u'speci', u'wolv', u'bear', u'wolf', u'fur']
cluster3
[u'eleph', u'beetl', u'polar', u'leopard', u'speci', u'wolv', u'bear', u'wolf', u'fur']
cluster0
[u'eleph', u'beetl', u'polar', u'leopard', u'speci', u'wolv', u'bear', u'wolf', u'fur']
cluster1
[u'eleph', u'beetl', u'polar', u'leopard', u'speci', u'wolv', u'bear', u'wolf', u'fur']
cluster4
[u'eleph', u'beetl', u'polar', u'leopard', u'speci', u'wolv', u'bear', u'wolf', u'fur']
cluster5
[u'eleph', u'beetl', u'polar', u'leopard', u'speci', u'wolv', u'bear', u'wolf', u'fur']

Любая помощь в этом отношении будет высоко оценена.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Только что нашел решение.Это был просто вопрос изменения места, где я создал словарь.Так как словарь был создан в самом верхнем цикле, где я уже перебирал i, следующий цикл for продолжал проходить через родительский цикл и завершился инициализацией переменных с feature_set, записанным в течение последнего i петля.

Следовательно, я изменил инициализацию словаря в цикле i следующим образом и теперь произнесу слова.

d = {}
for i in range(true_k):
    print("Cluster %d:" % i, end='')
    cluster_terms = []
    for ind in order_centroids[i, :10]:
       ...

    feature_set =[]

    if(len(filtered_terms)!=0):
        for m in filtered_terms:
            print(' %s' % m, end='')
            feature_set.append(m)
        for w in cluster_terms:
            for b in filtered_terms:
                if (w != b):
                    print(' %s' % w, end='')
                    feature_set.append(w)
        d["cluster{0}".format(i)] = feature_set
    else:
        for h in cluster_terms:
            print(' %s' % h, end='')
            feature_set.append(h)
        d["cluster{0}".format(i)] = feature_set

        #globals()['string%s' % f] = feature_set
    #d["cluster{0}".format(i)] = feature_set

    print()
print("Clusters stored in a dictionary of Variables")

print ()
for k in d:
    print (k)
    print (d[k])
0 голосов
/ 15 мая 2018

Ваш feature_set является плоским списком, как вы распечатали.

Этот код:

for f in range(0, i+1):
    d["cluster{0}".format(f)] = feature_set

просто назначает этот список каждому кластеру, поэтому конечный результат оченьочень ожидал.Чтобы ваш кусок кода работал, одной идеей было бы иметь ваш feature_set в виде двумерного списка, подобного этому:

feature_set = [[1, 2, 3, 4], [5, 6], [7, 8, 9], [10], [11,12]]

for f in range(0, i+1):
    d["cluster{0}".format(f)] = feature_set[f]

feature_set[f] - это содержимоевашего кластера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...