2014-09-30 15 views
0

Я только начал работать с nltk и python, и у меня возникла небольшая проблема, итерация по списку биграмм, возвращаемых nltk ,Итерация по биграмм (tuple), заданная nltk: TypeError: объект «NoneType» не является итерируемым, Python

Пример того, что я хочу:

это список биграмм: [('больше', 'есть'), ('есть', сказал '), ('сказал', «чем «), (» чем»,„сделано“)]

То, что я хочу, чтобы иметь возможность получить каждый Биграммные: (более, есть) и каждый член каждого биграммы: более, есть и т.д. отдельно

Вот что я пробовал до сих пор, основываясь на некоторых ответах в stackoverflow:

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 - список кортежей, так что я делаю неправильно?

Не могли бы вы указать мне какой-либо рабочий код или учебник. Я также буду рад принять любой правильный ответ.

Спасибо заранее

Примечания: Я работаю с питона 2,7

+0

Ваша первая попытка работает для меня: 'for (a, b) в битрамах:' Если в этот момент 'bigrams' был None, это объясняло бы вашу ошибку. – Celeo

+0

Да, как это глупо! Я забыл оператор return в той функции, которую я использовал, поэтому для биграмм были None. Спасибо за ваше наблюдение – sel

ответ

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') 
>>> 
Смежные вопросы