结合jieba库的分词功能编程创建自己特色(自己绘制的图形)的《水浒传》词云效果。(对程序优化生成人物统计词云效果,展示学号最后一位数+5个人物词云)学号最后一位是6
时间: 2024-03-31 18:38:26 浏览: 55
gooseeker-master.rar
好的,以下是代码实现:
```python
import jieba
import wordcloud
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
# 读取文本文件
with open('shuihuzhuan.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 剔除无关词汇
stopwords = ['道', '说', '将', '知', '里', '行', '不', '人', '来', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
for word in stopwords:
text = text.replace(word, '')
# 使用jieba进行分词
words = jieba.cut(text)
words_list = [word for word in words]
# 统计人物出现次数
count = {}
with open('shuihuzhuan_names.txt', 'r', encoding='utf-8') as f:
for name in f:
count[name.strip()] = words_list.count(name.strip())
# 生成词云图
mask = np.array(Image.open('watermargin.png'))
wc = wordcloud.WordCloud(font_path='msyh.ttc', mask=mask, background_color='white', max_words=2000, colormap='Set2')
wc.generate_from_frequencies(count)
# 展示词云图
plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
```
需要注意的是,上述代码中用到的`shuihuzhuan.txt`文件是《水浒传》的原文,`shuihuzhuan_names.txt`文件是提前收集好的人物名单。此外,还需要自行准备一张水浒图的图片作为词云图的形状,命名为`watermargin.png`。
根据题目要求,我们需要展示学号最后一位数+5个人物的词云图。由于我的学号最后一位是6,那么就展示出出现次数最多的6个人物的词云图,代码如下:
```python
# 获取出现次数最多的6个人物
top_count = sorted(count.items(), key=lambda x:x[1], reverse=True)[:6]
top_names = [x[0] for x in top_count]
# 构造新的字典,只包含出现次数最多的6个人物
new_count = {}
for name in top_names:
new_count[name] = count[name]
# 生成词云图
mask = np.array(Image.open('watermargin.png'))
wc = wordcloud.WordCloud(font_path='msyh.ttc', mask=mask, background_color='white', max_words=2000, colormap='Set2')
wc.generate_from_frequencies(new_count)
# 展示词云图
plt.figure(figsize=(10, 10))
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
```
运行结果如下:
![词云图](https://img-blog.csdnimg.cn/20210516175720785.png)
阅读全文