2013-02-19 93 views
0

我有一個元組列表。那些元組包含一個標籤和一個列表。它看起來像這樣:複雜結構的詞幹

[('neg', ['watching', 'by', 'myself', 'tweetdebate', 'not', ...]), ('pos', ['here', 'we', 'go', 'tweetdebate', 'tweetdebate', ...])] 

而且它這個

for label, words in labeled_words: 

我怎麼能發生變異的那些話讓他們的小寫莖的迭代?

像這樣的事情在一個循環我想(在詞幹是PorterStemmer()):

stemmer.stem(word.lower()) 

這不起作用:

labeled_words = [(label, [stemmer.stem(word.lower()) for words]) for label, words in labeled_words ] 

謝謝您的時間。

+0

我不知道你在問什麼,因爲我不知道什麼'詞幹.stem'應該這樣做。什麼是你期望的輸入和輸出的例子? – 2013-02-19 00:18:43

+0

正如在@Joey Lesh的例子中,stemmer.stem應該用於標記每個單詞中的labeled_words。作爲一個python newby – storedope 2013-02-19 10:01:33

+0

編輯:正如在@Joey Lesh的例子中,stemmer.stem應該幹掉label_words中的每個單詞。作爲一個蟒蛇新手,我沒有注意價值的不變性。我需要一個需要。謝謝你的時間。 – storedope 2013-02-19 10:19:58

回答

3

這主要是'我如何處理循環和變量'的問題。主要的是不要嘗試和修改你正在迭代的列表。相反,建立一個新的列表。

我認爲這是你在找什麼:

labeled_words = [('neg', ['watching', 'by', 'myself', 'tweetdebate', 'not']), ('pos',  ['here', 'we', 'go', 'tweetdebate', 'tweetdebate'])] 
stemmedWords = [] 
for label, words in labeled_words: 
    stemmed = [] 
    for word in words: 
     stemmed.append(porter2.stem(word)) 
    stemmedWords.append((label,stemmed)) 

輸出的樣子:

>>> stemmedWords 
[('neg', ['watch', 'by', 'myself', 'tweetdeb', 'not']), ('pos', ['here', 'we', 'go', 'tweetdeb', 'tweetdeb'])] 
+0

是的,謝謝。 Thad做了詭計。 – storedope 2013-02-19 10:12:32