我想为字母制作四元组
>>> from nltk.probability import FreqDist
>>> from nltk.util import ngrams
>>> from nltk.text import Text
>>> fin= open(r'C:\Users\user\Desktop\quran.txt', "r", encoding='utf-8').read()
我用utf-8
打开文件夹 >>> generated_ngrams = ngrams(" " + fin, 4,pad_left=False, pad_right=True, right_pad_symbol=' ')
从fin
生成ngrams>>> for gram in generated_ngrams :
gram
i+=1
if i > 1000:
break
我缩短文件以便于处理
(' ', '\ufeff', 'ب', 'ِ')
Traceback (most recent call last):
File "<pyshell#6>", line 3, in <module>
i+=1
NameError: name 'i' is not defined
这是我的错误
答案 0 :(得分:1)
我不完全确定你的其余代码会发生什么,但在尝试增加之前我从未初始化。这就像添加1到无,这会引发错误。添加以下行:
i = 0
在你的For声明之前。如果在For之后添加,则每次循环都会得到i = 1,因为每次都会将1添加到0。
此外,克变量未在任何地方使用,这也会引发错误。无论价值是什么,它都应该用于在你的方法中做一些事情。否则,迭代generate_ngrams是没有意义的。
答案 1 :(得分:0)
请使用以下代码,这可能会有帮助。
i = 0
for gram in generated_ngrams:
print(gram)
i+=1
if i > 1000:
break
答案 2 :(得分:0)
在Python中,enumerate
函数允许您使用自动计数器循环访问某些内容。
对于您的示例,您可以编写如下代码:
for i, gram in enumerate(generated_ngrams):
if i > 1000:
break
我敢说这将是更加pythonic的方式。