Почему я получаю RuntimeError: генератор поднял StopIteration? и как это решить? - PullRequest
0 голосов
/ 23 апреля 2019

Я делаю биграммы из токенов, хранящихся в списке docToken.

print(docToken[520])

Вывод: ['sleepy', 'account', 'just', 'man', 'tired','twitter', 'case', 'romney', 'кандидат', 'взгляды']

list(nltk.bigrams(docToken[520]))

Вывод: [('sleepy', 'account'), ('account ',' just '), (' just ',' man '), (' человек ',' устал '), (' устал ',' twitter '), (' twitter ',' case '), ('case ',' romney '), (' romney ',' кандидат '), (' кандидат ',' выглядит ')]

и когда я использую nltk.bigrams(docToken[i]) в цикле, яЯ получаю следующую ошибку в диапазоне> = 1000:

bigram=[]
for i in range(5000):
    ls=list(nltk.bigrams(docToken[i]))
    for j in ls:
        bigram.append(list(j))

, он работает нормально, когда диапазон (500) в первом цикле, но когда диапазон равен 1000 или больше, он выдает мне следующую ошибку:

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

1 Ответ

0 голосов
/ 28 мая 2019

Мне не удалось устранить эту ошибку. Не уверен, почему nltk.bigrams(docToken[i]) генерирует это, но я смог создать биграммы, используя следующий код.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...