鱼C论坛

 找回密码
 立即注册
查看: 1560|回复: 0

[技术交流] Python:制作《三国演义-三英战吕布》的词云图

[复制链接]
发表于 2021-6-8 08:48:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 划句顾 于 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 = [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()    #显示图像


结果如下:
1623113002.jpg
Figure_1.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 17:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表