红楼梦人物出场统计python_Python程序设计习题3——红楼梦人物出场次数统计
时间: 2023-10-29 12:06:55 浏览: 58
不好意思,我刚刚回答过您的问题了,以下是Python代码实现红楼梦人物出场次数统计:
```python
# 打开红楼梦txt文件
with open('红楼梦.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 定义人物列表
characters = ['贾', '史', '王', '薛', '林', '李', '妙', '黛', '宝', '元', '晴', '香', '甄', '湘', '碧', '嫣', '婉', '凤', '迎', '探', '惜', '梦', '菊', '熙', '袭', '芳', '红', '杏', '檀', '贵', '珠', '钗', '宝玉', '黛玉', '凤姐', '元春', '探春', '惜春', '香菱', '宝钗', '湘云']
# 统计人物出现次数
count = {}
for char in characters:
count[char] = content.count(char)
# 输出结果
for char in count:
print(char + ' 出现次数:' + str(count[char]))
```
在上述代码中,我们首先打开红楼梦文本文件,然后定义了人物列表(根据我们的需求可自行添加或修改),接着使用循环遍历人物列表,统计每个人物在文本中出现的次数,并将结果存储在字典中。最后,我们遍历字典并输出结果。
如果您需要统计其他文本中的人物出现次数,只需将代码中的文件名和人物列表替换为相应的值即可。
相关问题
统计红楼梦人物出场次数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编写一个程序,实现《红楼梦》中人物出场次数的统计。首先,你需要将《红楼梦》的文本进行处理,将其中的人名提取出来。可以使用jieba库进行中文分词,然后根据人名词性标注抽取人名。可以参考以下代码:
```python
import jieba.posseg as pseg
# 读取《红楼梦》文本
with open('hongloumeng.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 提取人名
names = []
words = pseg.cut(text)
for word, flag in words:
if flag == 'nr': # nr表示人名
names.append(word)
```
接下来,可以使用Python的collections库中的Counter类来统计人名出现的次数,并按照出现次数从高到低排序,输出结果。可以参考以下代码:
```python
from collections import Counter
# 统计人名出现次数
name_counts = Counter(names)
# 按照出现次数从高到低排序
name_counts = sorted(name_counts.items(), key=lambda x: x[1], reverse=True)
# 输出结果
for name, count in name_counts:
print(name, count)
```
这样就能够得到《红楼梦》中人物出场次数的统计结果了。