用python完成统计红楼梦中任务出场次数,并形成词云图。至少统计出出场次数最多的前5个人物;词云图出现的人物名字数量与统计数量一致
时间: 2024-01-22 17:17:45 浏览: 82
好的,这个任务可以分为两部分:统计出场次数和生成词云图。我来分别讲一下。
首先是统计出场次数。我们可以通过Python中的正则表达式来匹配出人物名称,并记录下每个人物出现的次数。代码如下:
```python
import re
from collections import Counter
# 读取红楼梦文本
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用正则表达式匹配人物名称
pattern = re.compile(r'[\u4e00-\u9fa5]{2,5}(?:·[\u4e00-\u9fa5]{2,5})*')
names = re.findall(pattern, text)
# 统计人物出现次数
counter = Counter(names)
# 输出出现次数最多的前5个人物
for name, count in counter.most_common(5):
print(name, count)
```
其中,`hongloumeng.txt` 是红楼梦的文本文件,需要先下载并保存到本地。上述代码会输出出现次数最多的前5个人物。
接下来是生成词云图。我们可以使用第三方库 `wordcloud` 来实现。代码如下:
```python
import matplotlib.pyplot as plt
from wordcloud import WordCloud
# 读取红楼梦文本
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用正则表达式匹配人物名称
pattern = re.compile(r'[\u4e00-\u9fa5]{2,5}(?:·[\u4e00-\u9fa5]{2,5})*')
names = re.findall(pattern, text)
# 统计人物出现次数
counter = Counter(names)
# 生成词云图
wordcloud = WordCloud(font_path='msyh.ttf', background_color='white', width=800, height=600)
wordcloud.generate_from_frequencies(counter)
# 显示词云图
plt.imshow(wordcloud)
plt.axis('off')
plt.show()
```
其中,`msyh.ttf` 是微软雅黑字体文件,需要先下载并保存到本地。上述代码会生成一个词云图并显示出来,人物名称的大小和出现次数成正比。
需要注意的是,词云图中只会显示出现次数不为零的人物名称。如果想要只显示出现次数最多的前5个人物,可以修改如下:
```python
# 取出现次数最多的前5个人物
top_names = dict(counter.most_common(5))
# 生成词云图
wordcloud = WordCloud(font_path='msyh.ttf', background_color='white', width=800, height=600)
wordcloud.generate_from_frequencies(top_names)
```
这样就只会显示出现次数最多的前5个人物的名称了。
阅读全文