Python词云wordcloud——根据词语生成图像

编程入门 行业动态 更新时间:2024-10-21 20:35:15

Python词云wordcloud——根据<a href=https://www.elefans.com/category/jswz/34/1762903.html style=词语生成图像"/>

Python词云wordcloud——根据词语生成图像

wordcloud作者github应用实例:
.py
官网:.WordCloud.html
内容包括:生成中文词云、英文词云、根据单词出现频率生成词云

参数设定

WordCloud可以直接pip安装,在Anaconda里python -m pip install SomePackage(包名)就可以安装。
WordCloud()部分常用参数
font_path:string字体,中文需要设定中文字体
width:int (default=400)宽
height:int (default=200)高
prefer_horizontal:float (default=0.90)水平与竖直排版比,小于1则将不合适水平词语竖直显示,大于1则只水平
mask:nd-array or None (default=None) 背景图,white (#FF or #FFFFFF)区域不能放词。
scale:float (default=1) 对大型词云用scale缩放比放大尺寸生成速度更快,但可能模糊
max_words:number (default=200)最大词量
stopwords:set of strings or None如果不设定停止词则使用默认STOPWORDS
background_color:color value (default=”black”)设置背景色
mode:string (default=”RGB”)设定RGBA则背景变为透明

wordcloud.WordCloud方法
我使用过的:
generate(text)Generate wordcloud from text.生成词云
to_file(filename)Export to image file. 保存图片
recolor([random_state, color_func, colormap])Recolor existing layout.对已有的词云重新配色(比重新生成某种颜色的词云快)
process_text(text)Splits a long text into words, eliminates the stopwords.返回统计文本中单词频率的dict
generate_from_frequencies(frequencies[, …])Create a word_cloud from words and frequencies.根据频率生成词云
没用过的:
fit_words(frequencies) Create a word_cloud from words and requencies.
generate_from_text(text)Generate wordcloud from text.
to_array()Convert to numpy array.

应用

注意:
1、词云每次随机生成,再次运行则生成新词云。
2、wordcloud.to_file(‘myfig.png’)的方法生成词云比plt.savefig更清楚,后者不能反映词云设置的大小等参数。
以下代码中text文件选择了分别包含林俊杰对的时间点的中英文歌词的两个txt,掩码图片选了一张白底png图片。

无背景词云
from wordcloud import WordCloud
import matplotlib.pyplot as plttext = open('C:/Users/Violette/Desktop/data/As I believe.txt').read()#读入文本
wordcloud=WordCloud()
wordcloud.generate(text)
image=wordcloud.to_image()
plt.imshow(image) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.savefig('C:/Users/Violette/Desktop/data/myfig.png')
plt.show()

无背景频率词云

统计文本中单词出现的频率,频率越大的单词词云中字体越大。
用process_word()方法统计单词频率,返回dict
generate_from_frequencies(dict)方法生成频率词云

from wordcloud import WordCloud
import matplotlib.pyplot as plttext = open('C:/Users/Violette/Desktop/data/As I believe.txt').read()#读入文本
wordcloud=WordCloud()
process_word=WordCloud.process_text(wordcloud,text)
print(process_word)
wordcloud.generate_from_frequencies(process_word)
image=wordcloud.to_image()
plt.imshow(image) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.savefig('C:/Users/Violette/Desktop/data/myfig.png')
plt.show()

在歌词中出现频率最高的词是’believe’: 8,‘know’: 8所以这两个词在图像中最大:

背景词云

在图片mask上生成词云,多增加一步读入背景图并将图片转换为数组:
需要import的文件:
import numpy as np
from PIL import Image
需要将读取图像转为数组格式来进行后续操作:
mask_image=np.array(Image.opern(‘mask.png’))
wordcloud=WordCloud(background_color=“white”,width=600, max_words=100, mask=mask_image).generate(text)

如果需要转换颜色为mask颜色则:
from wordcloud import ImageColorGenerator
image_colors = ImageColorGenerator(mask_image)#提取颜色
wordcloud.recolor(color_func=image_colors)#重置颜色函数
使用recolor重置颜色,可以将词云在mask对应位置的字体颜色变为mask图片上的颜色。
完整代码:

from wordcloud import WordCloud, ImageColorGenerator#用于提取图片颜色
import numpy as np
from PIL import Image
import matplotlib.pyplot as plttext = open('C:/Users/Violette/Desktop/data/As I believe.txt').read()#读入文本images=Image.open('C:/Users/Violette/Desktop/data/heart.png')#读入背景图
mask_image=np.array(images)#图片转化为数组
#等价于mask_image = np.array(Image.open('C:/Users/Violette/Desktop/data/heart.png'))wordcloud=WordCloud(background_color="white",width=600, max_words=100, mask=mask_image).generate(text)#生成词云图#提取mask颜色
image_colors = ImageColorGenerator(mask_image)
#wordcloud.recolor(color_func=image_colors)#重置颜色函数image=wordcloud.to_image()# 显示图像
fig,axes = plt.subplots(1,2)
axes[0].imshow(wordcloud)#不设置颜色
axes[1].imshow(wordcloud.recolor(color_func=image_colors))#将词云颜色设置为mask的颜色
for ax in axes:ax.set_axis_off()#给每幅图都去坐标轴
plt.savefig('C:/Users/Violette/Desktop/data/myfig.png')
plt.show()

中文词云

关于读中文txt参考原文链接:
文中提到txt使用utf8编码的时候会默认在文件开头插入三个不可见字符,python定义为codecs.BOM_UTF8。
对python2.7:
读中文txt时必须先比较前三个字符与codecs.BOM_UTF8,如果一样就删除前三个字符然后再decode。

import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:data = data[3:]print data.decode("utf-8")

对python3:
读取文件时解码可以直接encoding=‘gbk’

调用WordCloud时,设定字体参数font_path

text = open('C:/Users/Violette/Desktop/data/chinese.txt',encoding='gbk').read()#读入txt格式中文文本
text = open('C:/Users/Violette/Desktop/liao_excel/classify_model1.csv',encoding='utf-8').read()#csv格式中文文本
wordcloud=WordCloud(font_path='C:/Windows/Fonts/simfang.ttf',background_color="white",width=600, max_words=100, mask=mask_image).generate(text)#生成词云图时需要设定字体参数font_path

更多推荐

Python词云wordcloud——根据词语生成图像

本文发布于:2024-02-06 23:21:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751458.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:词语   图像   Python   词云   wordcloud

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!