将上述代码添加详细注释
时间: 2024-03-09 13:46:49 浏览: 185
好的,下面是添加详细注释后的代码:
```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()
```
在上面的代码中,我们首先使用 `open()` 函数读取了《红楼梦》的文本文件,使用 `with` 语句可以在文件使用完后自动关闭文件。然后,我们使用 `jieba` 库进行了分词,将文本内容分割成单个词语。
接着,我们使用一个字典 `characters` 统计每个词语出现的次数,并将其进行排序,使用 `sorted()` 函数。然后,我们根据学号最后一位数+5个人物,选取出现次数最多的几个人物,使用列表推导式实现。
接下来,我们使用 `PIL` 库读取了自动轨迹图形文件,使用 `np.array()` 将其转换为数组,方便后续使用。然后,我们使用 `WordCloud` 类创建了一个词云对象 `wc`,并使用 `mask` 参数指定了轨迹图形的形状,使用 `background_color` 参数指定了词云的背景颜色,使用 `font_path` 参数指定了字体文件的路径。
最后,我们使用 `generate_from_frequencies()` 方法生成了词云所需的词语和词频,使用 `imshow()` 方法显示词云,使用 `axis()` 方法隐藏坐标轴,使用 `show()` 方法展示词云效果。
将《红楼梦》的文本文件命名为 `hongloumeng.txt`,将自动轨迹图形的文件命名为 `shape.png`,并将 `simhei.ttf` 字体文件放在代码所在的目录下,即可运行以上代码生成您需求的《红楼梦》词云效果。
阅读全文