基于NLTK的N-Gram语言模型代码运行报错求助
问题解决:AttributeError: 'int' object has no attribute 'items'
错误原因
你代码里的d是defaultdict(Counter),意味着d[a, b]返回的是一个Counter对象。而freq_tri[a, b, c]是一个整数(FreqDist存储的是n-gram的出现次数),直接对Counter执行+= 整数操作会触发错误——因为Counter的+=方法预期接收的是另一个Counter或键值对迭代器,而非单个整数。
修正代码
把累加逻辑改成针对Counter的键赋值,直接将三元组的次数加到对应二元组键下的c键上:
# generate frequency of n-grams freq_bi = FreqDist(bigram) freq_tri = FreqDist(trigram) d = defaultdict(Counter) for a, b, c in freq_tri: if a is not None and b is not None and c is not None: # 直接给Counter的键c累加次数 d[a, b][c] += freq_tri[(a, b, c)]
补充说明
如果freq_tri是nltk.probability.FreqDist实例,遍历它时拿到的是所有三元组键(比如(a,b,c)),freq_tri[(a,b,c)]就是该三元组的出现次数。通过d[a,b][c] += 次数,就能正确构建二元组到后续词的频率映射,符合N-gram语言模型的需求。
内容的提问来源于stack exchange,提问作者SUGANTHI M
相关产品推荐
相关产品推荐

