Python统计中文词频的四种方法

统计中文词频是Python考试中常见的操作,由于考察内容较多,因此比较麻烦,那么有没有好的方法来实现呢?今天,我们总结了四种常见的中文词频统计方法,并列出代码,供大家学习参考。

中文词频统计主要是通过open()打开文本,然后read()方法读取后,采用结巴分词(jieba)模块进行分词,接着用推表推导式、Counter或者是字典的方法来统计词频,也可以采用NLTK的方法,最后格式化打印出来。

题目:统计中文文本文件【词频统计文本.txt】中长度大于1的词的词频,然后打印出词频数最高的10个词。

默认系统里已经安装好了jieba这个模块。如果还没有安装,可以在cmd下通过pip install jieba来安装这个模块。

一、字典法------常用的方法

先读取文本,然后jieba分词,再对分词后的列表进行遍历,然后用字典统计词频。这里排除了单个词,代码如下:

python 复制代码
import jieba
txt = open("词频统计文本.txt", "r").read()
words = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1: #排除单个字符的分词结果
        continue
    else:
        counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(10):
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word,count))
print ('已统计数量排前10的词')

二、Counter法------代码简单,速度快

先生成Counter对象,再排序,最后再打印出来。这里我们使用了most_common的方法,代码更为简洁,更好理解一点。代码如下:

python 复制代码
import jieba
from collections import Counter
with open("词频统计文本.txt", "r",encoding="utf-8") as f:
    words = jieba.lcut(f.read())
    words = [item for item in words if len(item)>1]
counts = Counter(words)
for word,count in counts.most_common(10):
    print(word,count)
print ('已统计数量排前10的词')

三、NLTK方法------有点儿小麻烦

利用列表推导式筛选列表,利用NLTK中的FreqDist来统计列表中的词步,代码如下。

python 复制代码
import jieba,os
from nltk.probability import FreqDist
with open("词频统计文本.txt","r",encoding="utf-8") as f:
    text = f.read()
words = jieba.lcut(text)
lst = [i for i in words if len(i)>1]
freq = FreqDist(lst)
for item in freq.most_common(10):
    word,count=item
    print(f"{word:<10}\t{count:<5}")
print ('已统计数量排前10的词')

使用这种方法,得安装nltk包,较为麻烦。

四、列表推导式法

如果不借助其它包,我们可以充分利用Python自带的count方法和列表推导式,实现词频的统计。这其中与前面排序的方法不同的是,我们采用了sorted的方法,完整代码如下:

python 复制代码
import jieba,os
with open("词频统计文本.txt","r",encoding="utf-8") as f:
    text = f.read()
words = jieba.lcut(text)
lst = [(key,words.count(key)) for key in set(words) if len(key)>1]
items = sorted(lst,key=lambda x:x[1],reverse=True)
for i in range(10):
    word, count = items[i]
    if len(word) == 1: #排除单个字符的分词结果
        continue
    else:
        print(f"{word:<10}\t{count:<5}")
print ('已统计数量排前10的词')

五、学后反思

  1. 中文词频统计主要考察文本的读取、列表的遍历、jieba分词、词频统计、排序、结果的格式化和打印输出等综合能力。因此,它是Python二级中常考的题目,认真学习,并找出多种词频统计的方法可以更好地理解Python中的相关概念和基础语法知识。

  2. 四种方法中最麻烦的是NLTK法和列表推导式化,字典法和Counter方法最为常用,字典法常出现在考试中,而Counter的方法实用性更强,大家可以有选择地使用。

  3. 有了词频表,后续可以进行可视化的图表生成,包括词云图和线形图等,以便更直观地观察语篇中词的特点。

相关推荐
小镇敲码人4 分钟前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
萧鼎5 分钟前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
缺点内向35 分钟前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
alvin_200544 分钟前
python之OpenGL应用(二)Hello Triangle
python·opengl
luoyayun3611 小时前
实现Windows系统标题栏颜色跟随主题动态切换
windows·系统标题栏颜色·标题栏颜色
铁蛋AI编程实战1 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
jiang_changsheng1 小时前
RTX 2080 Ti魔改22GB显卡的最优解ComfyUI教程
python·comfyui
喵叔哟1 小时前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
2501_930707782 小时前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
猫头虎2 小时前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy