You need to enable JavaScript to run this app. Python使用NLTK统计推文二元n-gram频率 结果不符合预期求助
优惠活动
大模型
产品
解决方案
定价
更多

Python使用NLTK统计推文二元n-gram频率 结果不符合预期求助

二元n-gram统计结果异常的修正方案

核心问题根源

你当前代码的核心bug非常明确:直接对推文列表执行str(list_)是完全错误的操作。这个转换是把整个列表的Python字符串表示转成了文本,生成的字符串会自带每篇推文包裹的单引号、列表元素之间的逗号分隔符,这些字符根本不是推文的实际内容。后续split()分词时,这些带引号的碎片会被当成独立词汇,生成大量跨推文边界的无效n-gram,这也是你最终输出结果和预期完全不符的直接原因。

可落地的修正步骤

  • 彻底替换错误的列表转字符串操作,改用字符串拼接的方式整合所有推文内容,全程不夹带Python语法层面的无效字符
  • 分词后统一转换为小写,避免同一个词组因为首字母大小写差异被统计为两个不同项,匹配示例中全小写的词形输出
  • 正常生成n-gram序列、用计数器统计频率,直接转换为要求的列表格式输出

修正后的完整可运行代码

from collections import Counter
from nltk import ngrams 

# 替换原有的 text_ = str(list_) 错误写法
# 直接把列表内所有推文内容用空格拼接成统一语料
text_ = " ".join(list_)

n_gram = 2
# 分词后统一转小写,匹配示例输出的小写词形
processed_words = [word.lower() for word in text_.split()]
bi_gram_corpus = ngrams(processed_words, n_gram)

# 统计频率并转换为目标输出格式
terms = Counter(bi_gram_corpus)
final_output = list(terms.items())

补充提示

如果需要进一步提升统计准确率,可以在分词环节增加简单的清洗逻辑,过滤掉带特殊符号的无效碎片词,但当前导致结果异常的核心问题,替换str(list_)的错误用法即可完全解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 14:15:08