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

相关推荐
Aevget11 分钟前
界面控件DevExpress WPF v25.2预览 - 模板工具包全新升级
c#·wpf·界面控件·devexpress·ui开发
TheWindofFate32 分钟前
C# List集合
c#·list
程序员皮皮林39 分钟前
Java 25 正式发布:更简洁、更高效、更现代!
java·开发语言·python
好家伙VCC41 分钟前
**发散创新:AI绘画编程探索与实践**随着人工智能技术的飞速发展,AI绘
java·人工智能·python·ai作画
数新网络1 小时前
Data Ingestion: Architectural Patterns
python·command-pattern
顾安r1 小时前
10.25 脚本 整理2024全年 GITHUB每周热门项目
linux·c语言·python·github·bash
星河队长2 小时前
C#实现智能提示输入,并增色显示
开发语言·c#
Mr.Lu ‍2 小时前
Windows开发,制作开发软件安装程序(二)
windows
新子y2 小时前
【小白笔记】 while 与 for + break 的比较分析
笔记·python
海木漄3 小时前
C# 内存是绝对自动清理吗?
开发语言·c#