# -*- coding: utf-8 -*-
# 引入库
from wordcloud import WordCloud
import jieba
import os
path = os.path.abspath('./word_cloud') # 指定文件路径
font = r'C:\\Windows\\fonts\\SimHei.ttf' # 指定字体,中文词云需要设置字体
一、准备文本
# 准备文本
f = open(path+'/test.txt', encoding='UTF-8') # 打开文件
txt_data = f.read() # 读取文件
f.close() # 关闭文件
f_word = jieba.cut(txt_data) # 分词
f_word_split = " ".join(f_word) # 拼接
二、创建词云
w = WordCloud(font_path=font) # 创建对象
w.generate(f_word_split) # 加载文本
w.to_file(path+'/test.png') # 输出图片
三、wordcloud 库说明
制作词云基本步骤分三步:
1、创建对象,配置参数(w = WordCloud('''设置参数''') )
2、加载词云文本
3、输出词云文件
1、WordCloud() 参数及意义
参数名称 | 数值类型 | 默认值 | 参数说明 |
width | int | 400 | 输出的画布宽度,默认400像素 |
height | int | 200 | 输出的画布高度,默认200像素 |
font_path | string | None | 字体路径 |
prefer_horizontal | float | 0.9 | 单词水平排列出现的频率,(垂直方向出现频率为0.1) |
scale | float | 1 | 缩放比例,如值为2.0,则长和宽都为原画布的2倍 |
max_font_size | int | None | 显示的最大的字体大小 |
min_font_size | int | 4 | 显示的最小的字体大小 |
font_step | int | 1 | 字体步长,如果大于1,会加快运算但可能导致结果误差较大 |
max_words | number | 200 | 显示的词的最大个数 |
relative_scaling | float | 0.5 | 词频和字体大小的关联性 |
stopwords | set of strings | STOPWORDS | 设置屏蔽词,默认使用内置 |
background_color | colorvalue | "black" | 背景颜色 |
mode | string | ”RGB” | 当参数为“RGBA”且background_color不为空时,背景为透明 |
random_state | int | None | 为每个单词返回一个PIL颜色 |
regexp | string | None(optional) | 使用正则表达式分隔输入的文本 |
collocations | bool | True | 是否包括两个词的搭配 |
color_func | callable | None | 生成新颜色的函数,默认为空使用self.color_func |
colormap | string | ”viridis” | 给每个单词随机分配颜色,若指定color_func,忽略该方法 |
mask | ndarray | None | 默认使用二维遮罩绘制词云。如果设置mask,则画布宽高值被忽略,遮罩形状被mask取代。除全白(#FFFFFF)的部分不绘制,其余部分会用于绘制词云。 如: my_img=np.array(Image.open(path+'/test.jpg')),mask=my_img |
2、wordcloud 的常规方法
方法 | 描述 |
w.generate(txt) | 向WordCloud对象w中加载文本txt |
w.to_file(filename) | 将词云输出为图像文件,.png或.jpg格式 |
四、示例:
# -*- coding: utf-8 -*-
from wordcloud import WordCloud
from PIL import Image
import jieba
import matplotlib.pyplot as plt
import numpy as np
import os
path = os.path.abspath('./word_cloud')
font = r'C:\\Windows\\fonts\\SimHei.ttf'
def my_cloud():
with open(path+'/test.txt', encoding='UTF-8') as f:
f_txt = f.read()
f.close()
f_txt_buff = jieba.cut(f_txt)
f_txt_split = " ".join(f_txt_buff)
my_img = np.array(Image.open(path+'/elephant.jpg'))
w = WordCloud(font_path=font, mask=my_img, stopwords=None, max_font_size=50)
w.generate(f_txt_split)
w.to_file(path+'/elephant_word.jpg')
return
if __name__ == '__main__':
my_cloud()
END