2013-08-02 3 views
2

Я написал скрипт python для вычисления семантической подобия между словами в наборе. Исходя из этого, я хочу удалить слова, которые не сильно коррелируют с другими. Ниже приведен код для удаления слова из набора.remove() функция для списка не работает

line_combined=copy(line1) 
threshold = 1/len(line_combined) 
for word3 in line_combined: 
    print("simdict[" + word3 + "] =" + str(simdict[word3])) 
    print ("ratio is: " + str(simdict[word3]/linesumsim)) 
    if(simdict[word3]/linesumsim)<threshold: 
     line_combined.remove(word3) 
     print word3 + " is removed" 
print "the output is:" 
print line_combined 

«строка1» - это набор слов, рассматриваемых в качестве списка. «simdict [word]» содержит сумму сходств «слова» с остальными словами в множестве. «linesumsim» - это сумма всех значений «simdict» для всех слов в наборе.

Выход:

linesumsim is 2.82012427883 
simdict[city] =0.517357507497 
ratio is: 0.183452024217 
simdict[mountain] =0.642265108364 
ratio is: 0.227743547752 
simdict[sky] =0.484908130427 
ratio is: 0.171945660007 
simdict[sun] =0.637289239227 
ratio is: 0.225979132909 
simdict[characteristics] =0.538304293319 
ratio is: 0.190879635114 
the output is: 
['city', 'mountain', 'sky', 'sun', 'characteristics'] 

Очевидно, что есть слова со значением simdict меньше порогового значения, 0,2 в этом случае. Но они не удаляются.

+2

предположение, но порог = 1.0/Len (line_combined). Целое деление как в 1/5 = 0 Я думаю –

+0

@TonyHopkinson: true, я изменил thershold = float (1)/len (line_combined). Оно работает. Спасибо, что указали! Кроме того, мне пришлось изменить цикл for, поскольку отмеченные лимиты – nish

+0

@nish 1.0 короче, чем float (1) ... и для аналогичных случаев: никогда не доверяйте никаким предположениям, которые вы делаете. Порог «print» равен «, порог» в начале тоже был бы полезен. – glglgl

ответ

1

Вы не можете удалить во время итерации по тому же списку, который хотите удалить.

Изменить

for word3 in line_combined: 

к

for word3 in line1: 
+0

Не беспокойтесь! :) Рад помочь! –

+0

У меня есть сомнения, как работает следующий код, его удаление элемента, plz исправить меня, если что-то не так. а = [1,2,3,4] для г в: , если a.index (я) == 2: a.remove (я) Отпечатайте –

Смежные вопросы