Я только начал изучать python. Я хочу написать программу в NLTK, которая разбивает текст на униграммы, bigrams. Например, если входной текст:Объект типа 'generator' не имеет len()
«Я чувствую себя грустно и разочарование из-за ошибки»
Функция должна генерировать текст, как:
Я -> чуствую -> грустить -> печально и -> и разочаровано -> отклонено из-за -> до ошибок
Я написали код для ввода текста в программу. Вот функция, которую я пытаюсь:
def gen_bigrams(text):
token = nltk.word_tokenize(review)
bigrams = ngrams(token, 2)
#print Counter(bigrams)
bigram_list = ""
for x in range(0, len(bigrams)):
words = bigrams[x]
bigram_list = bigram_list + words[0]+ " " + words[1]+"-->"
return bigram_list
Ошибка я получаю ...
for x in range(0, len(bigrams)):
TypeError: object of type 'generator' has no len()
Поскольку функция Ngram возвращает генератор, я попытался с помощью len(list(bigrams))
, но она возвращает значение 0, поэтому я получаю ту же ошибку. Я упомянул другие вопросы о stackexchange, но я все еще не понимаю, как это решить. Я застрял в этой ошибке. Любое обходное решение, предложение ?.
Если 'LEN (список (биграммы))' возвращает '0', то это по-видимому вопрос ... Вы, вероятно, нужно выяснить, почему 'ngrams (маркер , 2) 'не возвращает никаких значений. – jmetz
... и обновить заголовок вопроса и текст соответственно; на данный момент заголовок вводит в заблуждение – jmetz
'for x in bigrams' должен работать. Тогда нет необходимости в 'words = bigrams [x]'. Зачем? 'x' будет вашим' words' –