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

如何在Python中将单词分割为n元语法?代码错误求助

修正N元语法(N-grams)生成与计数函数

你遇到的问题核心是循环逻辑错误,导致n-gram被重复统计。以下是符合需求的修正代码,同时保留你提到的字母过滤、计数功能:

from collections import Counter

def generate_ngrams(word_list, n):
    ngram_counter = Counter()
    for word in word_list:
        # 过滤非字母字符,转为小写(可根据需求取消小写转换)
        cleaned_word = ''.join([c.lower() for c in word if c.isalpha()])
        word_len = len(cleaned_word)
        # 仅当单词长度不小于n时生成n元语法
        if word_len >= n:
            # 遍历生成所有合法的n元语法
            for i in range(word_len - n + 1):
                ngram = cleaned_word[i:i+n]
                ngram_counter[ngram] += 1
    return dict(ngram_counter)

# 测试你的样本数据
test_words = ['adven', 'adventure']
# 生成4元语法
print(generate_ngrams(test_words, 4))

运行结果与说明

输出结果:{'adve': 2, 'dven': 1, 'vent': 1, 'entu': 1, 'ntur': 1, 'ture': 1}

  • 单词adven(长度5)生成2个4元语法:adve、dven
  • 单词adventure(长度9)生成5个4元语法:adve、vent、entu、ntur、ture
    完全符合n元语法的生成规则:长度为L的单词,可生成L - n + 1个n元语法。

原代码常见错误分析

  1. 循环范围错误:如果错误使用range(len(word))而非range(len(word)-n+1),会导致切片越界或重复统计同一个n-gram
  2. 未正确过滤字符:如果没先清理非字母字符,可能生成包含特殊字符的无效n-gram,同时干扰长度计算
  3. 计数逻辑重复:比如嵌套了不必要的循环,导致同一个n-gram被多次累加

内容的提问来源于stack exchange,提问作者oliv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:40:24