如何在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元语法。
原代码常见错误分析
- 循环范围错误:如果错误使用
range(len(word))而非range(len(word)-n+1),会导致切片越界或重复统计同一个n-gram - 未正确过滤字符:如果没先清理非字母字符,可能生成包含特殊字符的无效n-gram,同时干扰长度计算
- 计数逻辑重复:比如嵌套了不必要的循环,导致同一个n-gram被多次累加
内容的提问来源于stack exchange,提问作者oliv
相关产品推荐
相关产品推荐

