划句顾 发表于 2021-6-8 08:48:17

Python:制作《三国演义-三英战吕布》的词云图

本帖最后由 划句顾 于 2021-12-28 12:33 编辑

'''*************************************************************************
    @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 =
for word in segWords:#循环读取每个分词
    if word not in rmvWords: #如果不在屏蔽词库中
      objWords.append(word) #将分词追加到列表
'''
for word in segWords:
    if len(word) == 1:
      continue
    else:
      objWords = objWords.get(word,0) + 1
items = list(objWords.items())
items.sort(key = lambda x : x,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()    #显示图像

结果如下:




页: [1]
查看完整版本: Python:制作《三国演义-三英战吕布》的词云图