2014-09-30 102 views
0

我剛開始使用nltk和python,並且在遍歷由nltk返回的bigrams列表時遇到一個小問題。我想要什麼迭代由nltk給出的bigrams(元組):TypeError:'NoneType'對象不可迭代,Python

例子:

這是雙字母組名單: [( '更多', '是'),( '是', '說'),( '說',「比「),(」不是」,‘完成’)]

我要的是能夠得到每個兩字:(更多是),每個二元的每個術語:更多的,是等分別

這是我到目前爲止,基於在計算器中的一些答案:

bigrams = nltk.bigrams(doclist) 

#method 1 
for (a, b) in bigrams: #I get this error: TypeError: 'NoneType' object is not iterable 
    print a 
    print b 

#method 2 
#convert to a list first 
bigrams = list(bigrams)# I get the same error 
for (a, b) in bigrams: 
    print a 
    print b 

#method 3 
#convert to a dict first 
dct = dict(tuples)# I get the same error 

我認爲這個bigrams是一個元組列表,所以我做錯了什麼?

你可以請我指出任何工作代碼或教程。我也很樂意接受任何正確的答案。

預先感謝您

注:我使用Python 2.7

+0

您的第一次嘗試對我有效:'for(a,b)in bigrams:' 如果此時'bigrams'爲None,那就可以解釋您得到的錯誤。 – Celeo 2014-09-30 17:30:02

+0

是的,這是多麼愚蠢!我忘記了我使用的函數中的return語句,所以bigrams是None。感謝您的觀察 – sel 2014-09-30 17:42:08

回答

1

工作你只需要使用變量(與bigram指標數)的元組內不迭代元組這樣的:(for (a, b) in bigrams) ,如果你只是希望每個bigram使用ONE variable在循環:

爲了更好地理解看到下面的演示:

>>> bigrams=[('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')] 
>>> for a, b in bigrams: 
...  print a 
...  print b 
... 
more 
is 
is 
said 
said 
than 
than 
done 
>>> for a in bigrams: 
... print a 
... 
('more', 'is') 
('is', 'said') 
('said', 'than') 
('than', 'done') 
>>>