python统计红楼梦的词云分析,并统计人名出场频率最高的20位
时间: 2024-03-06 12:52:18 浏览: 160
好的,我来为您介绍一下如何使用 Python 对《红楼梦》进行词云分析并统计人名出场频率前 20 名。
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. 统计人名出现频率并输出前 20 名
使用正则表达式匹配人名,然后使用 collections 库中的 Counter 类统计人名出现频率并输出前 20 名:
```python
import re
# 使用正则表达式匹配人名
pattern = r'[\u4e00-\u9fa5]{2,4}(?:·[\u4e00-\u9fa5]{2,4})*'
names = re.findall(pattern, text)
# 统计人名出现频率
name_freq = Counter(names).most_common(20)
# 输出前 20 名人名
for name, freq in name_freq:
print(name)
```
完整代码如下:
```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(20)
# 输出前 20 名人名
for name, freq in name_freq:
print(name)
```
运行以上代码后,可以得到《红楼梦》的词云图和人名出现频率前 20 名。需要注意的是,由于《红楼梦》文本文件可能包含一些特殊字符,因此在打开文件时需要指定编码方式为 utf-8。
阅读全文