文章中的例子主要借鉴wordColud的examples,在文章对examples中的例子做了一些改动。
一、wordColud设计中文词云乱码
使用wordColud设计词云的时候可能会产生乱码问题,因为wordColud默认的字体不支持中文,所以我们只需要替换wordColud的默认字体即可正常显示中文。
1、中文词云乱码
我们使用simhei(黑体)来替换wordColud的默认字体。
2、替换默认字体
a、在字体文件*.tff字体文件(simhei.tff)拷贝到wordColud安装的文件夹中,文件夹路径:anaconda(python)-->lib-->site-packages-->wordcolud,如下图:
其中矩形框出来的是wordColud默认的字体,椭圆形框的是我们下载的字体。
b、修改wordcolud.py文件中的字体设置,打开改路径下的wordcolud.py文件,找到下图的所示的框出来的这一行(29行)
将系统的DroidSansMono.tff修改为simhei.tff即可。
二、wordColud示例
1、设计一个简单的圆形词云
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS
from PIL import Image
from os import path
import matplotlib.pyplot as plt
#用来正常显示中文
plt.rcParams["font.sans-serif"]=["SimHei"]
#用来正常显示负号
plt.rcParams["axes.unicode_minus"]=False
import os
import random,jieba
'''
绘制单个词一个圆形的词云
'''
def single_wordColud():
text = "第一 第二 第三 第四"
#产生一个以(150,150)为圆心,半径为130的圆形mask
x,y = np.ogrid[:300,:300]
mask = (x-150) ** 2 + (y-150) ** 2 > 130 ** 2
mask = 255 * mask.astype(int)
wc = WordCloud(background_color="white",repeat=True,mask=mask)
wc.generate(text)
#将x轴和y轴坐标隐藏
plt.axis("off")
plt.imshow(wc,interpolation="bilinear")
plt.show()
2、以图片形状作为背景设计词云
下面以蜡笔小新的这张图片作为背景来设计一个词云,我们通过读取一个txt文件,文件中包含了很多段落,然后通过jieba对句子进行分词,去除停用词之后,生成一张词云的照片。
a、读取文件内容
使用jieba分词后,词之间需要通过空格进行分割,不然在产生词云的时候回变成一个词。
'''
中文分词
'''
def segment_words(text):
article_contents = ""
#使用jieba进行分词
words = jieba.cut(text,cut_all=False)
for word in words:
#使用空格来分割词
article_contents += word+" "
return article_contents
b、读取停用词
停用词包括一些标点符号,和一些没有实际意义的词,我们需要将这些词都去除。
'''
从文件中读取停用词
'''
def get_stopwords():
dir_path = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
#获取停用词的路径
stopwords_path = os.path.join(dir_path,"txt/stopwords.txt")
#创建set集合来保存停用词
stopwords = set()
#读取文件
f = open(stopwords_path,"r",encoding="utf-8")
line_contents = f.readline()
while line_contents:
#去掉回车
line_contents = line_contents.replace("\n","").replace("\t","").replace("\u3000","")
stopwords.add(line_contents)
line_contents = f.readline()
return stopwords
c、生成词云图片
def drow_mask_wordColud():
#获取当前文件的父目录
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
mask = np.array(Image.open(path.join(d,"img/test.jpg")))
text = open(path.join(d,"txt/test.txt"),"r",encoding="utf-8").read().
replace("\n","").replace("\t","").replace("\u3000","")
#对文本进行分词
text = segment_words(text)
#获取停用词
stopwords = get_stopwords()
#创建词云
'''
max_words:显示词的数量
mask:背景
stopwords:停用词,是一个set集合
margin:词之间的间隔
background_color:词云图片背景颜色
'''
wc = WordCloud(max_words=100,mask=mask,background_color="white",
stopwords=stopwords,margin=10,random_state=1).generate(text)
default_colors = wc.to_array()
# #保存词云图片
# wc.to_file("a_new_hope.png")
plt.imshow(default_colors,interpolation="bilinear")
plt.axis("off")
plt.show()
3、自定义词云的颜色
from wordcloud import WordCloud,get_single_color_func
import matplotlib.pyplot as plt
'''
定义一个字体颜色设置类
'''
class GroupedColorFunc(object):
def __init__(self,color_to_words,default_color):
self.color_func_to_words=[
(get_single_color_func(color),set(words))
for (color,words) in color_to_words.items()
]
self.defalt_color_func=get_single_color_func(default_color)
def get_color_func(self,word):
try:
#设置每个词的颜色
color_func = next(color_func for (color_func,words) in self.color_func_to_words
if word in words)
except StopIteration:
#词的默认颜色
color_func = self.defalt_color_func
return color_func
def __call__(self,word,**kwargs):
return self.get_color_func(word)(word,**kwargs)
if __name__ == "__main__":
text = "第一 第二 第三 第四 第五 第六"
#创建词云
wc = WordCloud(collocations=False,background_color="white").generate(text)
#设置词的颜色
color_to_words={
#使用RGB来设置词的颜色
"#00ff00":["第一","第五"],
"red":["第三","第六"],
"yellow":["第二"]
}
#设置词默认的颜色
default_color = "blue"
grouped_color_func = GroupedColorFunc(color_to_words,default_color)
#设置词云的颜色
wc.recolor(color_func=grouped_color_func)
#显示词云图
plt.figure()
plt.imshow(wc,interpolation="bilinear")
plt.axis("off")
plt.show()
通过词的颜色设置类,来设置不同词的颜色。
4、自定义突出词的重要程度
在生成词云的时候,默认使用的是使得词频高的词更加突出,突出的词会比较大,有时候我们已经计算出了词的权重,想通过词云图来突出权重大小的差别。
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
def get_mask():
x,y = np.ogrid[:300,:300]
mask = (x-150) ** 2 + (y-150) ** 2 > 130 ** 2
mask = 255 * mask.astype(int)
return mask
if __name__ == "__main__":
#每个词的权重
text = {"第一":0.1,"第二":0.2,"第三":0.3,"第四":0.4,"第五":0.5}
wc = WordCloud(background_color="white",mask=get_mask())
wc.generate_from_frequencies(text)
plt.axis("off")
plt.imshow(wc,interpolation="bilinear")
plt.show()
5、保存词云图片
wc.to_file("test.png")
更多关于python词云库wordCloud使用方法请查看下面的相关链接
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]






