源代码:
# TODO 读取《小王子》中文版文本文件,并生成词云图
# 导包
import re
import jieba
import numpy as np
import pandas as pd
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from PIL import Image
zh_pattern = re.compile(u'[\u4e00-\u9fa5]+')
# TODO 1 读取《小王子》中文版文本文件
file = open('《小王子》中文版.txt', 'r', encoding='ansi')
content = file.read()
file.close()
# TODO 2 统计词频
# 2.1 选取停用词(停用词来自 中文停用词表)
stat = []
stop_words = set()
with open('cn_stopwords.txt', 'r', encoding='utf-8') as f:
for line in f:
stop_words.add(line.strip())
# 2.2 去除停用词,并进行jieba分词
segs = jieba.cut(content)
for seg in segs:
if zh_pattern.search(seg):
if seg not in stop_words:
stat.append({'from': '小王子', 'word': seg})
stat_df = pd.DataFrame(stat)
pt_stat = stat_df.pivot_table(index='word', columns='from', fill_value=0, aggfunc=np.size)
# TODO 3 读取小王子背景图片并转换为灰度图像(可视化部分)
mask_image = np.array(Image.open("BackGround.png").convert("L"))
# TODO 4 创建词云对象 (设置字体,颜色,背景图)
cloud = WordCloud(font_path='C:\\simhei.ttf', background_color='white', colormap='Paired', mask=mask_image)
cloud.fit_words(pt_stat['小王子'].to_dict())
# TODO 5 显示词云图
plt.figure(figsize=(5, 5)) # 设置画布大小
plt.imshow(cloud)
plt.axis('off') # 不显示坐标轴
plt.show()
实现效果:
细节说明:
背景图片,停用词表,文档都放在一个文件夹之下(否则源代码的路径就要进行修改)
对于图片的要求,尽量是底色和图片区分较大(抠图抠出来的会更好)
对于exe可执行文件的生成,可以安装pyinstaller库
pip install pyinstaller
pyinstaller -F -w 文件名.py #把这个文件转换为exe文件
生成的exe文件,在dist文件夹下