Je crée des bigrammes des jetons stockés dans la liste docToken.
StopIteration Traceback (most recent call last) ~\Anaconda3\lib\site-packages\nltk\util.py in ngrams(sequence, n, pad_left, pad_right, left_pad_symbol, right_pad_symbol) 467 while n > 1: --> 468 history.append(next(sequence)) 469 n -= 1 StopIteration: The above exception was the direct cause of the following exception: RuntimeError Traceback (most recent call last) <ipython-input-76-8982951528bd> in <module>() 1 bigram=[] 2 for i in range(5000): ----> 3 ls=list(nltk.bigrams(docToken[i])) 4 for j in ls: 5 bigram.append(list(j)) ~\Anaconda3\lib\site-packages\nltk\util.py in bigrams(sequence, **kwargs) 489 """ 490 --> 491 for item in ngrams(sequence, 2, **kwargs): 492 yield item 493 RuntimeError: generator raised StopIteration
Résultat: ['somnolent', 'compte', 'juste', 'homme', 'fatigué', 'twitter', 'cas', 'romney', 'candidat', 'regarde']
bigram=[] for i in range(5000): ls=list(nltk.bigrams(docToken[i])) for j in ls: bigram.append(list(j))
Résultat: [('sleepy', 'account'), ('account', 'just'), ('just', 'man'), ('homme', 'fatigué'), ('fatigué', 'twitter'), ('twitter', 'cas'), ('cas', 'romney'), ('romney', 'candidat'), ('candidat', 'regarde')]
et lorsque j'utilise nltk.bigrams (docToken [i])
dans une boucle, j'obtiens une erreur de suivi sur la plage> = 1000:
XXX
cela fonctionne très bien lorsque la plage (500) dans la première boucle, mais lorsque la plage est de 1000 ou plus, cela me donne l'erreur suivante:
list(nltk.bigrams(docToken[520]))
3 Réponses :
Je n'ai pas pu résoudre cette erreur. Je ne sais pas pourquoi nltk.bigrams (docToken [i])
génère cela, mais j'ai pu créer des bigrammes en utilisant le code suivant.
bigram={} for i in range(size): ls=[] for j in range(len(docToken[i])-1): for k in range(j,len(docToken[i])-1): ls.append([docToken[i][j],docToken[i][k+1]]) bigram[i]=ls
J'ai corrigé ce problème en mettant à jour nltk de 3.3 -> 3.4
Faites simple - pip install nltk == 3.4
J'espère que ça marche!
J'ai moi aussi été confronté à la même erreur. Une raison possible peut être que l'un des éléments de docToken
est une liste vide.
Par exemple, le code suivant renvoie la même erreur lorsque i = 2
que le le deuxième élément est une liste vide.
[['the_wildlings', 'wildlings_are', 'are_dead'], ['do_the', 'the_dead', 'dead_frighten', 'frighten_you', 'you_ser', 'ser_waymar']]
Sortie:
docToken= [['the', 'wildlings', 'are', 'dead'], [], ['do', 'the', 'dead', 'frighten', 'you', 'ser', 'waymar']] docToken = [x for x in docToken if x] bigram = [] for i in range(len(docToken)): bigram.append(["_".join(w) for w in bigrams(docToken[i])]) bigram
Vous pouvez filtrer les listes vides de docToken
puis créez des bigrammes:
0 [('the', 'wildlings'), ('wildlings', 'are'), ('are', 'dead')] 1 --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) ~\AppData\Local\Continuum\anaconda3\lib\site-packages\nltk\util.py in ngrams(sequence, n, pad_left, pad_right, left_pad_symbol, right_pad_symbol) 467 while n > 1: --> 468 history.append(next(sequence)) 469 n -= 1 StopIteration: The above exception was the direct cause of the following exception: RuntimeError Traceback (most recent call last) <ipython-input-58-91f35cae32ed> in <module> 2 for i in range(3): 3 print (i) ----> 4 list(nltk.bigrams(docToken[i])) ~\AppData\Local\Continuum\anaconda3\lib\site-packages\nltk\util.py in bigrams(sequence, **kwargs) 489 """ 490 --> 491 for item in ngrams(sequence, 2, **kwargs): 492 yield item 493 RuntimeError: generator raised StopIteration
Sortie:
from nltk import bigrams docToken= [['the', 'wildlings', 'are', 'dead'], [], ['do', 'the', 'dead', 'frighten', 'you', 'ser', 'waymar']] for i in range(3): print (i) print (list(nltk.bigrams(docToken[i])))
Une autre raison possible peut être que vous ' re en utilisant nltk
3.3 en python 3.7.
Veuillez utiliser nltk 3.4, c'est la première version avec le support de Python 3.7, votre problème devrait être résolu dans cette version.
Veuillez consulter ici .
p >
Quelle version de Python utilisez-vous?
J'utilise python 3.7.0