'''*************************************************************************
@author:LaoGu
@time: 2021/6/8
@fuction:制作《三国演义-三英战吕布》的词云图
****************************************************************************'''
import re
import jieba
import wordcloud
import collections
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
#读取文本
with open('三国演义-三英战吕布.txt','r') as fn:
words=fn.read()
#文本预处理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')#定义正则表达式匹配模式
words = re.sub(pattern,'',words)#将符合模式的字符去除
#文本分词
segWords = jieba.cut(words,cut_all = False) #分词列表,精确模式分词
#屏蔽词汇
objWords = {} #目标词汇列表
'''
rmvWords = [u'的',u'得',u'地',u'如果']
for word in segWords: #循环读取每个分词
if word not in rmvWords: #如果不在屏蔽词库中
objWords.append(word) #将分词追加到列表
'''
for word in segWords:
if len(word) == 1:
continue
else:
objWords[word] = objWords.get(word,0) + 1
items = list(objWords.items())
items.sort(key = lambda x : x[1],reverse = True)
#词频统计
word_counts = collections.Counter(objWords) #对分词做词频统计
word_counts_top20 = word_counts.most_common(20) #获取前20个最高频的词
print(word_counts_top20)
#词频展示
mask = np.array(Image.open('小熊.jpg'))#词频背景图
wc = wordcloud.WordCloud(
font_path = 'C:/windows/Fonts/simhei.ttf',
background_color = 'white',
mask = mask,
max_words = 30,
max_font_size = 100
)
wc.generate_from_frequencies(word_counts) #从字典生成词云
#image_colors = wordcloud.ImageColorGenerator(mask)#从背景图建立颜色方案
#wc.recolor(color_func = image_colors) #将词云颜色设置为背景图方案
plt.imshow(wc)#显示词云
plt.axis("off") #关闭坐标轴
plt.show() #显示图像