我正在为存储在列表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
5条答案
按热度按时间ergxz8rk1#
我也遇到了同样的错误。一个可能的原因是
docToken
中的一个元素是空列表。例如,当作为第二个元素的
i=2
为空列表时,下面的代码将引发相同的错误。输出:
你可以过滤掉
docToken
中的空列表,然后创建二元语法:输出:
另一个可能的原因是你在python 3.7中使用的是
nltk
3.3。请使用nltk 3.4,这是支持Python 3.7的第一个版本,您的问题应该在此版本中得到解决。
请参见here。
sxissh062#
我通过将nltk从3.3升级到3.4修复了这个问题
做简单的事:
drnojrws3#
首先卸载当前版本的NLTK
然后安装最新版本的NLTK
然后检查NLTK版本,应为3.6.2
这将解决问题。
ddrv8njm4#
要完成@伦纳德回答,我已经通过卸载和重新安装简单地解决了它:
不要给予版本号,默认情况下,它会卸载你现有的版本,然后重新安装最新的版本。
xmjla07d5#
我无法解决这个错误。不知道为什么
nltk.bigrams(docToken[i])
会生成这个错误,但是我可以使用下面的代码创建bigram。