laocaiye 发表于 2026-5-15 17:14:00

关于使用jieba统计词频问题

经过实际比对,发现在使用jieba统计词频时并不准确,一些词语词频统计要少于实际词频。
下面的代码就是如此,问了deepseek、千问、豆包,使用jieba模块都没能解决,因为无法
具体到某一个词语,所以也无法使用正则匹配。请教大神们,如何修改代码?

import jieba

text = open("1.txt","r",encoding = 'utf-8').read()
text_list = jieba.lcut(text)
text_dict = {}

# 定义需过滤字符集
stop_punc = {",", "。", "、", "?", "!", "“", "”", "‘", "’", "(", ")", "《", "》", ":", ";", " ", "\n", "\t", "\r", "\"", "'", ",", "."}

for word in text_list:
    # 1. 过滤
    if word in stop_punc or word.isspace() or len(word) == 1:
      continue

    # 统计词频
    text_dict = text_dict.get(word, 0) + 1

# 排序并输出前10
text_dict = sorted(text_dict.items(), key=lambda x: x, reverse=True)
print(text_dict[:10])

FishC 发表于 2026-5-15 17:14:26

你好!看到你的问题,你遇到的词频统计不准确,很可能是因为代码中存在一个关键错误,并且分词本身也可能把想要的词语切碎了。下面详细说明并给出修改方案。

## 1. 代码根本错误

你的统计部分写成了:

text_dict = text_dict.get(word, 0) + 1

这一行会把 text_dict.get(word, 0) 返回的整数(比如3)赋值给 text_dict,导致整个字典变量变成了一个整数,后面的 text_dict.items() 会报错。

正确写法应该是:

text_dict = text_dict.get(word, 0) + 1


## 2. 分词可能不准确

jieba默认词典可能没有包含你文本中的一些专有词汇,比如“机器学习”、“人工智障”等会被拆成单字或更短的词,从而导致这些词语的统计结果为零或偏小。

**解决方法**:使用 jieba.load_userdict() 加载自定义词典,或者直接用 jieba.add_word() 把要统计的词语加入分词器。

## 3. 修改后的完整代码示例

假设你要统计“机器学习”、“深度学习”等词,可以这样:


import jieba
from collections import Counter

text = open("1.txt", "r", encoding='utf-8').read()

# 添加自定义词语,确保这些词不会被切碎
jieba.add_word("机器学习")
jieba.add_word("深度学习")
# 可以根据需要继续添加

# 分词(使用精确模式)
words = jieba.lcut(text)

# 定义过滤集
stop_punc = {",", "。", "、", "?", "!", "“", "”", "‘", "’", "(", ")", "《", "》", ":", ";", " ", "\n", "\t", "\r", "\"", "'", ",", "."}

# 过滤并统计
text_dict = {}
for word in words:
    if word in stop_punc or word.isspace() or len(word) == 1:
      continue
    # 正确的字典赋值
    text_dict = text_dict.get(word, 0) + 1

# 排序(按频次降序)
sorted_items = sorted(text_dict.items(), key=lambda x: x, reverse=True)
print(sorted_items[:10])


如果只需要出现次数最多的前10个词语,也可以用 Counter 更简洁:

word_counts = Counter(word for word in words if word not in stop_punc and len(word) > 1)
print(word_counts.most_common(10))


## 4. 如果某些词还是统计不对

请检查:
- 文本中该词语实际出现的次数(手动搜索确认)。
- 分词结果:可以用 print(jieba.lcut(文本)) 看看目标词语被切成什么样了,然后针对性地添加自定义词语。
- 过滤条件 len(word) == 1 可能会漏掉一些有意义的单字词,如果你需要的词语长度都大于1,则没问题。

另外,你原代码最后排序那一行 sorted(text_dict.items(), key=lambda x: x, reverse=True) 的key应该用 x 才能按频次排序,否则是按词语字典序排序。

总结:先修好字典赋值的 bug,再自定义分词词典,你的统计就会准确了。试试看,如果有具体词语仍不对,欢迎贴出示例文本片段,我可以帮你进一步分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小派 发表于 2026-5-15 17:29:52

这个问题大概率是分词粒度导致的——jieba 默认会按最细粒度切,但有些词可能被合并了。可以试试在代码开头加一句 jieba.load_userdict('自定义词典.txt'),把你想要的词手动加进去。另外,如果文本里有很多专业术语,建议先暴力遍历所有 n-gram(2-5字组合)做个词频统计,再对比 jieba 的结果,这样能定位到底是分词漏了还是统计逻辑有问题。
页: [1]
查看完整版本: 关于使用jieba统计词频问题