统计《红楼梦》中主要人物的出场次数
时间: 2023-10-30 17:05:03 浏览: 85
统计《红楼梦》中主要人物的出场次数可以通过程序实现。以下是一个简单的 Python 代码实现:
```python
# 读取《红楼梦》文本
with open('hongloumeng.txt', 'r', encoding='utf-8-sig') as f:
text = f.read()
# 定义主要人物列表
characters = ['贾宝玉', '林黛玉', '薛宝钗', '王熙凤', '史湘云', '贾母', '贾政', '王夫人', '凤姐儿', '邢夫人', '尤二姐', '晴雯']
# 统计人物出现次数
count = {char: text.count(char) for char in characters}
# 输出结果
for char, num in count.items():
print(f'{char} 出现了 {num} 次')
```
以上代码中,我们首先读取《红楼梦》文本,并定义了一个主要人物列表。然后,使用文本的 count 方法统计每个人物在文本中出现的次数,并将结果保存在一个字典中。最后,我们遍历字典,输出每个人物的出现次数。
相关问题
统计红楼梦人物出场次数python_红楼梦人物出场次数统计及人物出场词云
红楼梦的文本可以通过网络或者本地文件获取,我们可以使用 Python 中的 jieba 库进行中文分词,然后统计每个人物在文本中出现的次数,最终生成一个出场次数的排名表和一个人物出场次数的词云。
以下是代码示例:
```python
import jieba
from collections import defaultdict
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 读取红楼梦文本
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 中文分词
words = jieba.cut(text)
# 统计人物出现次数
counts = defaultdict(int)
for word in words:
if len(word) > 1: # 过滤掉单个字的词
counts[word] += 1
# 输出出场次数排名前十的人物
top_counts = sorted(counts.items(), key=lambda x:x[1], reverse=True)[:10]
for i, (name, count) in enumerate(top_counts):
print(f'{i+1}. {name}: {count}次')
# 生成人物出场次数词云
wc = WordCloud(font_path='msyh.ttc', background_color='white')
wc.generate_from_frequencies(counts)
plt.imshow(wc)
plt.axis('off')
plt.show()
```
这里我们使用了 Python 中的 defaultdict 来统计词频,这样就不需要事先对每个人物进行初始化,避免了出现 KeyError 的情况。同时,我们也过滤掉了单个字的词,以提高统计的准确性。
在生成词云时,我们使用了 WordCloud 库,并指定了字体和背景色。最终通过 matplotlib 显示出来。
需要注意的是,红楼梦的文本文件需要事先准备好,放在代码所在目录下,命名为 `hongloumeng.txt`。
红楼梦人物出场次数代码
这里是一个用 Python 统计《红楼梦》人物出场次数的示例代码:
```python
import re
# 读取文本文件
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用正则表达式匹配出人物名字
pattern = r'[\u4e00-\u9fa5]{2,4}(?:·[\u4e00-\u9fa5]{2,4})*'
names = re.findall(pattern, text)
# 统计人物出现次数
name_dict = {}
for name in names:
if name in name_dict:
name_dict[name] += 1
else:
name_dict[name] = 1
# 按出现次数从高到低排序
sorted_names = sorted(name_dict.items(), key=lambda x: x[1], reverse=True)
# 输出前20个人物及其出场次数
for i in range(20):
print(sorted_names[i][0], sorted_names[i][1])
```
需要注意的是,这段代码并不完美,可能会有一些误差和漏算的情况,但是可以给出一个大致的结果。