python生成词云图

python生成词云图

前言

python版本号:3.6.3
在网上看到词云图,一直觉得很有意思,最近没工作很空闲,就想着自己做一做
先放个效果图,这是用杰伦的三首歌《七里香》、《搁浅》、《借口》歌词文本做成的词云图。
在这里插入图片描述

python modules

需要使用的python包有:
wordcloud、jieba、numpy、cv2
使用pip安装即可

pip install wordcloud
pip install jieba
pip install numpy
pip install opencv-python

wordcloud参数说明

代码核心是wordcloud部分,下面列一下wordcloud的参数

font_path : string  #字体路径,如:font_path = '黑体.ttf'

width : int (default=400) #输出的图像宽度,默认为400像素

height : int (default=200) #输出的图像高度,默认为200像素

prefer_horizontal : float (default=0.90) #词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )

mask : nd-array or None (default=None) #背景布,除去纯白部分都会用来填充词云

scale : float (default=1) #按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍

min_font_size : int (default=4) #显示的最小的字体大小

max_font_size : int or None (default=None) #显示的最大的字体大小

font_step : int (default=1) #字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差

max_words : number (default=200) #要显示的词的最大个数

stopwords : set of strings or None #设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS。很多文章都没有说清楚要怎么写屏蔽词,其实就是一个list。

background_color : color value (default=”black”) #背景颜色,如background_color='white',背景颜色为白色

mode : string (default=”RGB”) #当参数为“RGBA”并且background_color不为空时,背景为透明

relative_scaling : float (default=.5) #词频和字体大小的关联性

color_func : callable, default=None #生成新颜色的函数,如果为空,则使用 self.color_func

regexp : string or None (optional) #使用正则表达式分隔输入的文本

collocations : bool, default=True #是否包括两个词的搭配

colormap : string or matplotlib colormap, default=”viridis” #给每个单词随机分配颜色,若指定color_func,则忽略该方法

random_state : int or None  #为每个单词返回一个PIL颜色

wordcloud输出形式

fit_words(frequencies)  #根据词频生成词云
generate(text)  #根据文本生成词云
generate_from_frequencies(frequencies[, ...])   #根据词频生成词云
generate_from_text(text)    #根据文本生成词云
process_text(text)  #将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )
recolor([random_state, color_func, colormap])   #对现有输出重新着色。重新上色会比重新生成整个词云快很多
to_array()  #转化为 numpy array
to_file(filename)   #输出到文件

jieba模块的使用

jieba是中文分词第三方库
一共有三种模式:精确模式、全模式、搜索引擎模式
精确模式下,把文本精确切分,不存在重复词语
全模式,文本中所有可能词语都扫描出来,存在重复
搜索引擎模式,基于精确模式,对长词再次切分

方法含义
jieba.cut(string)精确模式,返回一个生成器generator
jieba.cut(string,cut_all=True)全模式,输出文本中所有词语,返回一个生成器generator
jieba.cut_for_search(string)搜索引擎模式,返回一个生成器generator
jieba.lcut(string)精确模式,返回一个列表模式
jieba.lcut(string,cut_all=True)全模式,返回一个列表类型
jieba.lcut_for_search(string)搜索引擎模式,返回列表类型
jieba.add_word(word)向分词词典中添加新词

python中list容量有限,因此引入了生成器generator的概念,generator保存的是算法,list是[],generator是()。
可用for循环打印generator:

for i in generator:
	print(i)

代码演示

以下代码是一个示例,并不是生成上面示例图片的代码

# -*- coding: utf-8 -*- 
from wordcloud import WordCloud
import jieba
import cv2
import numpy as np

def read_word(text_path):
    with open(text_path,'r',encoding='utf-8') as f:
        cut_word = jieba.cut(f.read())
    result = " ".join(cut_word)
    img = cv2.imread('bg_java.png')
    img_array = np.array(img)
    stop_words = ["开发","工作","优先","具有","要求","公司","PHP","参与","熟悉","任职"]
    
    wc = WordCloud(
        font_path='simhei.ttf',     #字体
        background_color='white',   #背景颜色
        width=1000,
        height=600,
        max_font_size=80,
        min_font_size=10,
        mask = img_array,  #背景图片
        max_words=1000,
        stopwords=stop_words
    )
    wc.generate_from_text(result)
    wc.to_file('job_java.png')
    
if __name__ == '__main__':
    read_word("job.txt")
  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值