大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂
今天给大家看看,如何使用python
实现根据记录创建生成词云
首先我们看下效果图。
一个是生成了新闻的词云,另一个是生成了聊天记录的词云。下面是代码:
# coding: utf-8
import codecs
import logging
import os
from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image, ImageFont, ImageDraw
import numpy as np
import jieba
import pandas
import imageio
from common_util.config import PROJECT_PATH
# content:需要生成的内容
# filename词云图片名称
# title 标题
def createciyun(content, filename, title):
stopwords_filename = PROJECT_PATH+'userdict/stop_words_full.txt'
# 加载自定义词典
jieba.load_userdict( PROJECT_PATH+"userdict/custom_dict.txt")
# 配置停用词
stopwords = set([line.strip()
for line in codecs.open(stopwords_filename, 'r', 'utf-8')])
# 使用jieba进行分词
_seg_list = jieba.cut(content)
words = []
for seg in _seg_list:
word = seg.strip().lower()
if len(word) > 1 and word not in stopwords:
words.append(word)
words_df = pandas.DataFrame({'word': words})
words_stat = words_df.groupby(by=['word'])['word'].agg(np.size)
words_stat = words_stat.to_frame()
words_stat.columns = ['number']
words_stat = words_stat.reset_index().sort_values(by="number", ascending=False)
print("共去重 %d 个词(已去重)" % len(words_stat))
# 生成词云图片
_background_img = imageio.imread( PROJECT_PATH+"Images/cat.jpg")
_word_cloud = WordCloud(font_path= PROJECT_PATH+"font/jiangxizhuokai.ttf",
background_color=(255, 255, 255),
mask=_background_img,
max_font_size=600,
random_state=100
)
_word_cloud = _word_cloud.fit_words(
dict(words_stat.head(100).itertuples(index=False))
)
_background_img_colors = ImageColorGenerator(_background_img)
_word_cloud.recolor(color_func=_background_img_colors)
# 将词云图片保存到文件
_word_cloud.to_file(filename)
# 添加标题
add_title(filename, title)
logging.debug("生成词云成功!!")
# file:文件
# title_name:标题名
def add_title(file, title_name):
# 加载图片
body_img = Image.open(file)
width, height = body_img.size
# 增加的高度,用来放头部
additional_height = 100
height += additional_height
# 生成一个尺寸为width,height的背景色为白色的图片
bg = Image.new('RGB', (width, height), color=(255, 255, 255))
# 将原始图片粘贴到新背景的顶部
bg.paste(body_img, (0, additional_height))
# 字体路径
fontpath = PROJECT_PATH+'font/jiangxizhuokai.ttf'
font = ImageFont.truetype(fontpath, 32)
# 计算出需要写入的文字占用的像素
w, h = font.getsize(title_name)
# 创建画布
draw = ImageDraw.Draw(bg)
# 计算标题的起始位置,使其位于图片的正上方
title_y = additional_height - h # 从顶部开始,减去标题的高度
# 绘制标题文本
draw.text(((width - w) / 2, title_y), title_name, font=font, fill="#ff0000")
bg.save(file, "PNG")
print("{}标题添加完成".format(file))
用到的生成图片如下:
用到的其他字典和过滤池如下所示:
雄雄的小课堂 3 nz
穆雄雄 3 nz
雄雄 3 nz
雄雄的工具箱 3 nz
小鱼早晚安打卡 3 nz
AT&T 3 nz
B超 3 n
c# 3 nz
C# 3 nz
c++ 3 nz
C++ 3 nz
T恤 4 n
A座 3 n
A股 3 n
A型 3 n
A轮 3 n
AA制 3 n
AB型 3 n
B座 3 n
B股 3 n
B型 3 n
B超 3 n
B轮 3 n
BB机 3 n
BP机 3 n
C盘 3 n
C座 3 n
C语言 3 n
CD盒 3 n
…
"
$
&
’
(
)
*
+
,
–
.
…
…
…
./
.一
.数
.日
/
//
0
1
2
3
4
…