1.安装Anaconda和pycharm,并完成相关配置。
参考教程:https://blog.csdn.net/tang_chuanlin/article/details/79793654
配置之后需要在settings界面安装jieba等相关包。点击下图绿色+图标,搜索出包后点击左下侧安装即可。但是在安装wordcloud包时可能会出现错误,解决办法为手动下载whl文件进行安装。
下载界面:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
打开cmd->在Anaconda相关安装目录下找到pip.exe文件将其拖入->空一格输入“install whl文件的完整安装路径”,按下空格键安装完成。
2.词云图的实现
参考教程:https://blog.csdn.net/Tang_Chuanlin/article/details/79862505
3.注意
(1)f_stop = open(path.join(d, stop_name), encoding="utf8")
无法打开文件,将分词的文件另存为utf8编码文件格式即可。
(2)停用词表去掉聊天日期、网名、数字、链接、自动回复语言、系统提示语、文字显示的表情包。优化:如何自动去掉文本中的链接?
(3)修改词云的形状需要在参数mask内设置
完整代码如下:
import jieba
from os import path # 获取文档的路径
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.font_manager as fm
bg = np.array(Image.open("princess.png")) # 背景图
d = path.dirname(__file__) # 获取当前的项目文件夹的路径
stop_name = 'stopwords.txt' # 读取停用词表,jieba.add_word("叶文洁")可添加自定义分词
data_name = "20170520-20180113.txt" # 文本路径
data = open(path.join(d, data_name), encoding="utf8").read() # 读取要分析的文本,读取格式
def separate(text_data): # 定义函数用于分词
word_list = [] # 定义一个空的列表,保存分词
seg_list = jieba.cut(text_data, cut_all=False) # false精准分词模式,试试True??
list_str = ','.join(seg_list) # 将分词用,连接起来
# 打开停用词表
f_stop = open(path.join(d, stop_name), encoding="utf8")
try:
f_stop_text = f_stop.read()
finally:
f_stop.close() # 关闭资源
f_stop_seg_list = f_stop_text.split("\n") # 将停用词格式化,用\n分开,返回一个列表
# 对默认模式(精准)分词结果进行遍历,去除停用词
for my_word in list_str.split(','):
if not(my_word in f_stop_seg_list) and not my_word.isdigit() and len(my_word.strip()) > 1:
word_list.append(my_word)
return ' '.join(word_list)
result = separate(data)
# 生成词云图
wc = WordCloud(
background_color="white", # 设置背景为白色,默认为黑色
mask=bg, # 设置词云形状
width=990, # 设置图片的宽度
height=440, # 设置图片的高度
margin=10, # 设置图片的边缘
max_font_size=50, # 设置最大字体
random_state=30,
font_path='C:/Windows/Fonts/simfang.ttf' # 中文处理,用系统自带的字体
).generate(result)
my_font = fm.FontProperties(fname='C:/Windows/Fonts/simfang.ttf') # 为图片设置字体
image_colors = ImageColorGenerator(bg) # 产生背景图片,基于彩色图像的颜色生成器
plt.imshow(wc, interpolation="bilinear") # 开始画图
plt.axis("off") # 为云图去掉坐标轴
wc.to_file("公主图案.png") # 保存云图