2013-02-19 90 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