2013-08-02 53 views
2

我寫了一個python腳本來計算集合中單詞之間的語義相似性。基於此,我想刪除與其他人沒有強烈關聯的詞。以下是從集合中刪除單詞的代碼。刪除()函數列表不起作用

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 

「line1」是考慮中的單詞集合,用作列表。 「simdict [單詞]」將「單詞」與其餘單詞的相似性總和。 「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循環,因爲limelight指出 – nish

+0

@nish 1.0比float(1)短...並且對於類似的情況:永遠不要相信你所做的任何假設。 「打印」閾值是「開始時閾值」也會有幫助。 – glglgl

回答

1

您不能刪除,同時迭代你想要從同一個列表中刪除。

變化

for word3 in line_combined: 

for word3 in line1: 
+0

不用擔心! :) 樂意效勞! –

+0

我有疑問,下面的代碼如何工作,如何刪除該項目,如果出現問題,請糾正我。 一個= [1,2,3,4] 對於i在一個: 如果a.index(ⅰ)== 2: a.remove(ⅰ) 打印一個 –