l'objet de type "générateur" n'a pas de len()

J'ai juste commencé à apprendre le langage python.Je veux écrire un programme dans NLTK qui casse un texte dans unigrams, bigrams.
Par exemple, si l'entrée de texte est:

"Je suis sentiment de tristesse et de déception, en raison d'erreurs"

Fonction est de générer un texte comme:

Je suis-->am sentiment-->triste-->triste et-->, et déçu-->disppointed en raison-->-->erreurs

J'ai écrit du code de l'entrée de texte dans le programme. Voici la fonction que j'essaie:

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

L'erreur que j'obtiens est...

for x in range(0, len(bigrams)):
TypeError: object of type 'generator' has no len()

Comme le ngram fonction renvoie un générateur, j'ai essayé d'utiliser len(list(bigrams)) mais elle renvoie la valeur 0, donc, je reçois le même message d'erreur. J'ai parlé à d'autres questions sur stackexchange, mais je ne suis toujours pas arriver ronde comment faire pour résoudre ce problème. Je suis bloqué à cette erreur. Aucune solution de contournement, suggestion?.

Si len(list(bigrams)) retourne 0, alors que c'est sans doute la question... vous avez probablement besoin de comprendre pourquoi ngrams(token, 2) ne renvoie aucune valeur.
... et mise à jour de la question du titre et le texte en conséquence; pour le moment, le titre est trompeur
for x in bigrams devrait fonctionner. Alors pas besoin de words = bigrams[x]. Pourquoi? x sera votre words
"essayé d'appeler une fonction de liste sur elle pour en extraire le contenu et ensuite à l'aide de len(liste(bigrams))" est le (un des) problème(s), si je vous comprends bien. Vous d'abord d'échappement de la génératrice avec list et puis essayer d'appeler len(list(gen)) sur elle à nouveau. Comme le générateur est déjà épuisé, il va les entraîner dans une liste vide.
Bienvenue. BTW. bigram_list n'est pas une liste, mais la chaîne. Devrait-il être? Pour la chaîne de caractères que vous pouvez utiliser: bigram_list += words[0]+ " " + words[1]+"-->"

OriginalL'auteur Vishal Kharde | 2016-04-28