需求

用Python对已有的文字按照词频,生成词云图。词云图的样子如下图。

Python词云图设置高清 词云图pycharm制作_词频

工具

编程语言:Python
工具库:jieba、wordcloud
IDE:PyCharm

实现

jieba分词

首先要使用jieba库对原文本内容进行分词,有了词语,下面才能统计词频,判断哪些词出现较多。
jieba分词的简单用法:

# encoding=utf-8
import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式

seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))
test_sent = u"永和服装饰品有限公司"
result = jieba.tokenize(test_sent) ##Tokenize:返回词语在原文的起始位置
for tk in result:    
    print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])    
    print tk

# 输出
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
 
【精确模式】: 我/ 来到/ 北京/ 清华大学
 
【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
 
【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

以上用法参考博文《Markdown 引用》作者:Keaton2020
地址:https://www.jianshu.com/p/d87d7d2dcea9

wordcloud生成词云图

wordcloud的使用很简单,分为三步:

  1. 获取文本;
  2. 设置属性;
    这里强调两个属性。
    第一个是mask,可以指定词云图的轮廓形状,只需提供一张对比度鲜明的图片即可。
    第二个是stopwords,用于排除一些停用词,即无意义的高频词,如:的、我、进行...默认的停用词表是英文的,因此需要去网上下载一份中文停用词表,同时也可以添加指定停用词。
    其它属性见下表:

属性名

解释

font_path

字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path=‘黑体.ttf’

width

输出的画布宽度,默认为400像素

height

输出的画布高度,默认为200像素

prefer_horizontal

词语水平方向排版出现的频率,默认0.9(所以词语垂直方向排版出现频率为0.1)

mask

如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread(‘读取一张图片.png’),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存

scale

按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍

min_font_size

显示的最小的字体大小

font_step

字体步长如果步长大于1,会加快运算但是可能导致结果出现较大的误差

max_words

显示的词的最大个数

stopwords

设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS

background_color

背景颜色,如background_color=‘white’,背景颜色为白色

max_font_size

显示的最大的字体大小

mode

当参数为“RGBA”并且background_color不为空时,背景为透明

relative_scaling

词频和字体大小的关联性

color_func

生成新颜色的函数,如果为空,则使用 self.color_func

regexp

使用正则表达式分隔输入的文本

collocations

是否包括两个词的搭配

colormap

给每个单词随机分配颜色,若指定color_func,则忽略该方法

  1. 调用wordcloud.to_image(),生成图片。

代码

from wordcloud import WordCloud
import jieba
import numpy
import PIL.Image as Image


# 1.将字符串切分为单个字符
def chinese_jieba(text):
    wordlist_jieba = jieba.cut(text)
    space_wordlist = ' '.join(wordlist_jieba)
    return space_wordlist


# 2.生成词云图
with open("Information Technology.txt", encoding="utf-8")as file:
    # 获取jieba分词后的文章
    text = file.read()
    text = chinese_jieba(text)
    # 获取背景图片
    mask_pic = numpy.array(Image.open("china.jpg"))
    # 获取停用词表
    stopwords = open("stopwords.txt", "r", encoding='UTF-8').read()
    # 设置wordcloud属性
    wordcloud = WordCloud(font_path="C:/Windows/Fonts/simfang.ttf",
                          background_color="black", width=600,
                          height=300, max_words=100, min_font_size=8,
                          stopwords=stopwords,
                          mask=mask_pic).generate(text)
    # 生成图片
    image = wordcloud.to_image()
    image.show()

总结

wordcloud库已经实现了高度自动化,使用起来非常简单,只需设置一些参数,新手容易上手。