python 为什么我得到RuntimeError:生成器引发StopIteration?,如何解决?

3wabscal  于 2023-02-07  发布在  Python
关注(0)|答案(5)|浏览(151)

我正在为存储在列表docToken中的标记创建二元语法。

print(docToken[520])

输出:[“昏昏欲睡”、“账户”、“公正”、“男人”、“疲惫”、“推特”、“案例”、“罗姆尼”、“候选人”、“表情”]

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

输出:[(“昏昏欲睡”、“账户”)、(“账户”、“公正”)、(“公正”、“男人”)、(“男人”、"累了“)、(”累了“、”推特“)、(”推特“、”案例“)、(”案例“、”罗姆尼")、(“罗姆尼”、"候选人")、(“候选人”、“表情”)]
当我在一个循环中使用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
ergxz8rk

ergxz8rk1#

我也遇到了同样的错误。一个可能的原因是docToken中的一个元素是空列表。
例如,当作为第二个元素的i=2为空列表时,下面的代码将引发相同的错误。

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])))

输出:

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

你可以过滤掉docToken中的空列表,然后创建二元语法:

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

输出:

[['the_wildlings', 'wildlings_are', 'are_dead'],
 ['do_the',
  'the_dead',
  'dead_frighten',
  'frighten_you',
  'you_ser',
  'ser_waymar']]

另一个可能的原因是你在python 3.7中使用的是nltk 3.3。
请使用nltk 3.4,这是支持Python 3.7的第一个版本,您的问题应该在此版本中得到解决。
请参见here

sxissh06

sxissh062#

我通过将nltk从3.3升级到3.4修复了这个问题
做简单的事:

pip install nltk==3.4
drnojrws

drnojrws3#

首先卸载当前版本的NLTK

pip uninstall nltk==3.2.5

然后安装最新版本的NLTK

pip install nltk==3.6.2

然后检查NLTK版本,应为3.6.2

import nltk
print('The nltk version is {}.'.format(nltk.__version__))

这将解决问题。

ddrv8njm

ddrv8njm4#

要完成@伦纳德回答,我已经通过卸载和重新安装简单地解决了它:

pip uninstall nltk
pip install nltk

不要给予版本号,默认情况下,它会卸载你现有的版本,然后重新安装最新的版本。

xmjla07d

xmjla07d5#

我无法解决这个错误。不知道为什么nltk.bigrams(docToken[i])会生成这个错误,但是我可以使用下面的代码创建bigram。

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

相关问题