python编程实现《红楼梦》词云,输出排序前(学号最后一位数字+5)的人物,,词云形状为所实现的自动轨迹图形形状。
时间: 2024-03-09 16:46:47 浏览: 62
好的,让我来为您解答这个问题。
首先,需要安装 `wordcloud` 和 `jieba` 库。您可以在终端中使用以下命令进行安装:
```
pip install wordcloud jieba
```
接下来,您可以使用以下代码创建《红楼梦》词云效果:
```python
import jieba
import numpy as np
from PIL import Image
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 读取《红楼梦》文本文件
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用 jieba 库进行分词
words = jieba.cut(text)
# 先生成人物统计
characters = {}
for word in words:
if len(word) > 1:
if word in characters:
characters[word] += 1
else:
characters[word] = 1
# 对人物统计进行排序
characters = sorted(characters.items(), key=lambda x: x[1], reverse=True)
# 取学号最后一位数+5个人物
selected_characters = [character[0] for character in characters[1:int(student_id[-1])+6]]
# 读取轨迹图形文件
mask = np.array(Image.open('shape.png'))
# 生成词云
wc = WordCloud(background_color='white', mask=mask, font_path='simhei.ttf')
wc.generate_from_frequencies(dict(filter(lambda x: x[0] in selected_characters, characters)))
plt.imshow(wc)
plt.axis('off')
plt.show()
```
在上面的代码中,我们首先使用 `jieba` 库对《红楼梦》文本进行了分词,并统计了各个词语出现的次数。然后,我们对人物词频进行了排序,并根据学号最后一位数+5个人物生成了人物列表。
接着,我们使用 `PIL` 库读取了轨迹图形文件,并使用 `numpy` 将其转换为数组。最后,我们使用 `wordcloud` 库生成了词云,并使用 `mask` 参数指定了轨迹图形的形状,使用 `font_path` 参数指定了字体文件的路径。
将《红楼梦》的文本文件命名为 `hongloumeng.txt`,将自动轨迹图形的文件命名为 `shape.png`,并将 `simhei.ttf` 字体文件放在代码所在的目录下,即可运行以上代码生成您需求的《红楼梦》词云效果。
阅读全文