python词频统计 生成词云
博客简介
本篇博客介绍2个第三方库,中文分词库jieba
和词云库WordCloud
,我们将完成三个例子:
- 统计英文词汇频率
- 统计中文文本词汇频率使用jieba库
- 生成词云
在正式开始之前,我们先安装两个第三方库:中文分词库jieba
和词云库WordCloud
统计英文词汇频率
英文词汇统计十分简单,因为每个单词之间都是用空格分开的的,当然也有一些特殊模号,我们将对整个文本进行噪音处理,然后将其分割成单词,存入字典中,再给词汇按照频率排序,步骤如下:
- 从文件流 中读取一段全英文文本
- 将文本用lower()归一化成小写形式
- 将文本中的特殊符号:
;<>"~!@#$%^&*()-+[]|{}/*.,?
过滤,替换成空格for ch in ';<>"~!@#$%^&*()-+[]|{}/*.,?':replace
- 将文本split,划分成单个单词,返回一个列表
- 遍历这个列表,按照单词=>出现次存入字典中:
counts[x]=counts.get(x,0)+1
- 使用items()返回一个列表,给列表排序
- 格式化输出这个列表
- 代码如下:
#coding=gbk
def getText(fileName):f=open(fileName,'r')txt=f.read().lower()for ch in ';<>"~!@#$%^&*()-+[]|{}/*.,?':txt=txt.replace(ch,' ')f.close()return txtdef comp(x):return x[1]def main():txt=getText('English.txt')words=txt.split()counts={}for x in words:counts[x]=counts.get(x,0)+1items=list(counts.items())items.sort(key=comp,reverse=True)for i in range(10):key,value = items[i]print("{0:<10} {1:>5}".format(key,value))
main()
- 读入文件:
- 输出结果:
you 32
to 19
the 10
who 10
those 9
have 8
and 8
that 6
want 6
make 6
统计中文词汇频率
中文语句和英文不一样,中文词汇之间没有空格而是连续的字段,如何对一段文本进行分词处理呢?我们可以安装第三方库jeiba,它使用中文词库的方式来识别词汇:依靠中文词库计算出某个词汇的概率,从而确定某段文字是不是词汇,我们只需要在cmd中打开script目录,输入pip install jieba
即可完成安装,常用函数如下:
函数 | 描述 | 举例 |
---|---|---|
jieba.lcut(s) | 精确模式,把文本精确地切分开,不存在冗余,返回一个列表类型的分词结果 | jieba.lcut('中国是一个伟大的国家') |
jieba.lcut(s,cut_all=True) | 全模式,把文本中所有可能的词汇都扫描出来,存在冗余,返回一个列表类型的分词结果 | jieba.lcut('中国是一个伟大的国家',cut_all=True) |
jieba.lcut_for_search(s) | 搜索引擎模式,在精确模式的基础上对长词进行切分,返回一个列表类型的分词结果 | jieba.lcut_for_search('中国是一个伟大的国家') |
jieba.add_word(s) | 将新词汇添加到词库中 | jieba.add_word(‘我爱python’) |
- 举例:
#coding=gbk
import jieba
def main():print(jieba.lcut('中国是一个十分美丽的国家'))print(jieba.lcut('中国是一个十分美丽的国家',cut_all=True))print(jieba.lcut_for_search('中国是一个十分美丽的国家'))
main()
'''
['中国', '是', '一个', '十分', '美丽', '的', '国家']
['中国', '国是', '一个', '一个十', '十分', '美丽', '的', '国家']
['中国', '是', '一个', '十分', '美丽', '的', '国家']
'''
说完jieba库,我们要开始统计词频了,如何统计?步骤和统计英文相似,不过有了jieba的加持,这变得更为简单:
- 从文件流 中读取一段全中文文本
- 直接使用
jieba.lcut(txt)
将文本切分,返回一个列表 - 当然这个列表中包含了字符,我们可以直接在遍历过程中不统计len=1的字符
- 遍历这个列表,按照单词=>出现次存入字典中:
counts[x]=counts.get(x,0)+1
- 使用items()返回一个列表,给列表排序
- 格式化输出这个列表
- 代码如下:
#coding=utf-8
import jieba
def getText(fileName):f=open(fileName,'r',encoding='utf-8')txt=f.read()f.close()return txtdef comp(x):return x[1]def main():txt=getText('Chinese.txt')words=jieba.lcut(txt)counts={}for x in words:if len(x)==1:continueelse:counts[x]=counts.get(x,0)+1items=list(counts.items())items.sort(key=comp,reverse=True)for i in range(10):key,value = items[i]print("{0:<10} {1:>5}".format(key,value))
main()
- 文本读入
- 统计结果:
'''
可以 9
藏不住 4
如果 3
一天 3
我们 3
一个 3
男人 3
每个 3
那里 3
不怪 3
'''
生成词云
生成词云我们是用的是wordcloud库,这个库可以将给定的一段文本按照空格镜像区分,按照频率显示在一张图片上,频率越高,字体越大,函数以及参数如下:
- 生成词云对象:
wordcloud.WordCloud([width][,height][,min_font_size],[,max_font_size][,font_path][,max_words][,stop_words][,mask])
- 参数属性:
函数 | 描述 | 举例 |
---|---|---|
width | 词云对象的宽度,默认400 | w=wordcloud.WorldCloud(width=800) |
height | 词云对象的高度,默认600 | w=wordcloud.WorldCloud(height=800) |
min_font_size | 指定词云中字体的最小号,默认为4号 | w=wordcloud.WorldCloud(min_font_size=10) |
max_font_size | 指定词云字体的最大号,默认根据高度自动调节 | w=wordcloud.WorldCloud(max_font_size=20) |
font_step | 指定词云中字体字号的步进间隔,默认为1 | w=wordcloud.WorldCloud(font_step=2) |
font_path | 指定字体文件的路径,默认为None | w=wordcloud.WorldCloud(font_path='msyh.ttc') |
max_words | 指定词云中的最大显示单词数量,默认200 | w=wordcloud.WorldCloud(max_words=100) |
stop_words | 指定词云中的排除词列表,列表中的词汇将不会出现在词云中 | w=wordcloud.WorldCloud(stop_words={"python"}) |
mask | 指定词云形状,默认为长方形,需要引用imread()函数 | >>> from scipy.misc import imread >>> mk=imread('pic.png') >>>w=wordcloud.WordCloud(mask=mk) |
background_color | 指定词云图片的背景颜色,默认为黑色 | w=wordcloud.WorldCloud(background_color='white') |
- 将文本加载到词云对象:
w.generate(txt)
- 将词云对象导出成文件:
w.to_file(fileName)
- wordcloud根据空格来区分单词,并且会自动过滤符号
- 代码如下:(根据QQ消息记录,过滤掉头衔和@后生成词云)
#coding=gbk
#coding=utf-8
import wordcloud
import jieba
def getText(fileName):f=open(fileName,'r',encoding='gbk')txt=''for line in f:if ('【' in line) or ('】' in line) or ('@' in line):continueelse:txt+=linef.close()txt=' '.join(jieba.lcut(txt))return txt
def main():txt=getText('test.txt')w=wordcloud.WordCloud(font_path='msyh.ttc',width=800,height=600,max_words=40,font_step=3)w.generate(txt)w.to_file('wordcloud3.png')print('make wordCloud successfully!')
main()
- 复制好友的消息记录
- 展示效果:
python词频统计 生成词云相关推荐
- python词频统计完整步骤_Python中文文本分词、词频统计、词云绘制
本文主要从中文文本分词.词频统计.词云绘制方面介绍Python中文文本分词的使用.会使用到的中文文本处理包包括:wordcloud,jieba,re(正则表达式),collections. 1 准备工 ...
- 【文本挖掘】——词频统计、词云绘制与美化+[微微一笑很倾城]实战
词频统计.词云+实战 一.词频统计: 1.基本概念及原理 2.词频统计方法 二.词云 1.词云绘制工具: 2.python词云绘制--Wordcloud 三.基于分词频数绘制词云 1.利用词频绘制词云 ...
- 中文词频统计与词云生成
本次作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2822 中文词频统计 1. 下载一长篇中文小说. 2. 从文件读取 ...
- 统计csv词频_中文词频统计与词云生成
一.中文词频统计 1. 下载一长篇中文小说. 2. 从文件读取待分析文本. 3. 安装并使用jieba进行中文分词. pip install jieba import jieba jieba.lcut ...
- 在线词云加载慢,有水印?作为程序员,教你如何使用Java,Python和JS生成词云!
声明:本文转载huaairen作者一文<制作词云库图片>,如有侵权,请联系删除. 前言 某天心血来潮,想搞搞词云这玩意,网上很多在线生成词云的网站,但是加载都比较慢,或者有水印,再或者是无 ...
- 爱奇艺评论爬虫、词频统计、词云、PaddleHub内容审核
需求 第一步:爱奇艺<青春有你2>评论数据爬取(参考链接:https://www.iqiyi.com/v_19ryfkiv8w.html#curid=15068699100_9f9bab7 ...
- python中wordcloud生成词云_python使用WordCloud生成词云
前言 当我们想快速了解 书籍.小说.电影剧本中的内容是时,则可以采用绘制 WordCloud 词云图,显示主要的关键词,可以非常直观的看到结果 核心代码 from wordcloud import W ...
- +中文词频统计及词云制作9-25
1.我希望老师能讲一点python在数据挖掘,数据分析领域的应用,最好能举些实例,或者说带我们实际操作一波. 2.中文分词 下载一中文长篇小说,并转换成UTF-8编码 使用jieba库,进行中文词频统 ...
- 中文词频统计及词云制作
1.中软国际华南区技术总监曾老师还会来上两次课,同学们希望曾老师讲些什么内容?(认真想一想回答) 希望老师能讲讲更多关于python的知识,并且讲讲大数据的的另一些方向 2.中文分词 a.下载一中文长 ...
最新文章
- android 闪烁发光动画,androidview动画发光效果在imageview上
- 给Linux添加新用户,新建用户,新建帐号
- IDEA基于kotlin开发android程序配置小结
- MobIM仅为开发者提供即时通讯的消息通道服务
- 在朋友圈求助的NTP问题~
- 自己用as3实现的以多边形等几何模型为基础的碰撞系统 - 例子A
- (转) oracle清空数据库脚本
- Linux下制作虚拟软盘镜像
- 手机输入法带拼音声调_五笔已经淘汰,拼音到达瓶颈,百度重拳出击,全新输入方式来袭!...
- python 拆分excel 随机分组
- 混合现实在医学领域的应用学习日志
- 科普:手机电池的保护电路
- 221007工作日志:SPSS logistic回归分析结果释读详解
- vi 撤销上一步操作
- 重置已清账项目及两种不同重置方式(只重置、重置并冲销)介绍和实操-FBRA
- 个人日记系统,记录点滴小事,记录生活点点滴滴
- 【MSP430】MSP430F5529关于ADC12模数转换介绍
- 架构和框架(Framework)的区别
- 舞动你的文字,巧用CSS中marquee属性
- 谈谈红楼梦(第6-10回)