为什么我收到 RuntimeError:生成器引发 StopIteration?以及如何解决?

Has*_*eem 5 python nltk

我正在对存储在列表 docToken 中的标记进行二元组。

print(docToken[520])
Run Code Online (Sandbox Code Playgroud)

输出:['瞌睡', '帐户', '只是', '男人', '累了', '推特', '案件', '罗姆尼', '候选人', '看起来']

list(nltk.bigrams(docToken[520]))
Run Code Online (Sandbox Code Playgroud)

输出:[('瞌睡', '帐户'), ('帐户', '刚刚'), ('刚刚', '男人'), ('男人', '累了'), ('累了', 'twitter '), ('推特', '案件'), ('案件', '罗姆尼'), ('罗姆尼', '候选人'), ('候选人', '看起来')]

当我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))
Run Code Online (Sandbox Code Playgroud)

当第一个循环中的范围(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
Run Code Online (Sandbox Code Playgroud)

Has*_*eem 4

我无法解决这个错误。不知道为什么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
Run Code Online (Sandbox Code Playgroud)