You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:22:43