编程实现《红楼梦》词云,输出排序前(学号最后一位数字+5)的人物,,词云形状为所实现的自动轨迹图形形状。
时间: 2024-02-20 19:00:23 浏览: 138
好的,我可以帮你实现这个功能。首先需要安装几个库:
- jieba:中文分词库
- wordcloud:词云库
- numpy:科学计算库
- PIL:Python 图像处理库
安装命令如下:
```
pip install jieba
pip install wordcloud
pip install numpy
pip install pillow
```
接下来就是编写代码了,以下是实现的代码:
```python
import jieba
from wordcloud import WordCloud
import numpy as np
from PIL import Image
# 读取文本
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 中文分词
words = jieba.cut(text)
# 读取轨迹图形
mask = np.array(Image.open('shape.png'))
# 生成词云
wordcloud = WordCloud(
font_path='msyh.ttc', # 字体文件
mask=mask, # 轨迹图形
background_color='white', # 背景色
max_words=200, # 最大词数
max_font_size=80, # 最大字体大小
width=800, # 画布宽度
height=600 # 画布高度
).generate(' '.join(words))
# 保存词云图像
wordcloud.to_file('wordcloud.png')
# 统计人物出现次数
characters = ['贾宝玉', '林黛玉', '薛宝钗', '王熙凤', '贾母', '贾琏', '王夫人', '史湘云', '妙玉', '元春']
count = {}
for character in characters:
count[character] = text.count(character)
# 打印出现次数前 n 个人物
n = int(input('请输入 n:')) # 读取 n
for character, c in sorted(count.items(), key=lambda x: x[1], reverse=True)[:n]:
print(character, c)
```
这段代码将文本文件《红楼梦》读入,使用 jieba 库进行中文分词,然后根据给定的轨迹图形生成词云图像,并将其保存为 wordcloud.png。
接着统计文本中每个人物出现的次数,并按照出现次数进行排序,最后输出出现次数前 n 个人物的名称和出现次数,其中 n 的值为输入的数字加 5。
注意,这里的轨迹图形 shape.png 需要你自己准备,可以使用 Photoshop 或其他图像处理工具制作。
阅读全文