python统计红楼梦的词云分析,并统计人名出场频率最高的15位,并显示出场的次数
时间: 2024-03-07 22:46:23 浏览: 185
好的,我来为您介绍一下如何使用 Python 对《红楼梦》进行词云分析并统计人名出场频率前 15 名并显示出现的次数。
1. 安装所需依赖库
使用 Python 进行词云分析和人名出场频率统计需要用到一些第三方库,可以使用以下命令进行安装:
```
pip install jieba wordcloud matplotlib
```
2. 读取《红楼梦》文本文件并进行分词处理
先使用 Python 读取《红楼梦》文本文件,然后使用 jieba 库对文本进行分词处理:
```python
import jieba
from collections import Counter
# 读取《红楼梦》文本文件
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 对文本进行分词处理
words = jieba.cut(text)
```
3. 生成词云图
使用 wordcloud 库生成《红楼梦》的词云图:
```python
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 生成词云图
wordcloud = WordCloud(background_color='white', width=800, height=600).generate(' '.join(words))
# 显示词云图
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
```
4. 统计人名出现频率并输出前 15 名
使用正则表达式匹配人名,然后使用 collections 库中的 Counter 类统计人名出现频率并输出前 15 名,并显示出现的次数:
```python
import re
# 使用正则表达式匹配人名
pattern = r'[\u4e00-\u9fa5]{2,4}(?:·[\u4e00-\u9fa5]{2,4})*'
names = re.findall(pattern, text)
# 统计人名出现频率
name_freq = Counter(names).most_common(15)
# 输出前 15 名人名及出现的次数
for name, freq in name_freq:
print(name, freq)
```
完整代码如下:
```python
import jieba
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import re
# 读取《红楼梦》文本文件
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 对文本进行分词处理
words = jieba.cut(text)
# 生成词云图
wordcloud = WordCloud(background_color='white', width=800, height=600).generate(' '.join(words))
# 显示词云图
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
# 使用正则表达式匹配人名
pattern = r'[\u4e00-\u9fa5]{2,4}(?:·[\u4e00-\u9fa5]{2,4})*'
names = re.findall(pattern, text)
# 统计人名出现频率
name_freq = Counter(names).most_common(15)
# 输出前 15 名人名及出现的次数
for name, freq in name_freq:
print(name, freq)
```
运行以上代码后,可以得到《红楼梦》的词云图和人名出现频率前 15 名及出现的次数。需要注意的是,由于《红楼梦》文本文件可能包含一些特殊字符,因此在打开文件时需要指定编码方式为 utf-8。
阅读全文