编写程序统计《西游记》前15位出场最多的人物
时间: 2023-06-24 15:03:16 浏览: 289
好的,这里提供一种Python实现的方法,需要用到正则表达式模块re和collections模块中的Counter类。假设《西游记》的文本文件名为"xiyouji.txt",代码如下:
```python
import re
from collections import Counter
# 读取文本文件
with open('xiyouji.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用正则表达式匹配人物名称
pattern = re.compile('[\u4e00-\u9fa5]{2,5}(?:·[\u4e00-\u9fa5]{2,5})*')
names = pattern.findall(text)
# 使用Counter统计人物出现次数
name_count = Counter(names)
# 获取出现次数前15位的人物
top_15 = name_count.most_common(15)
# 输出结果
for i, (name, count) in enumerate(top_15, 1):
print(f'{i}. {name}: {count}次')
```
解释一下代码的思路:
1. 先读取文本文件,将文件内容存储在变量text中。
2. 使用正则表达式模块re中的compile函数,编译一个正则表达式,用于匹配人物名称。这里的正则表达式可以匹配两到五个汉字组成的人名,中间用“·”隔开的也算一个人名。
3. 使用正则表达式模块re中的findall函数,从文本中匹配出所有符合条件的人名,将它们存储在列表names中。
4. 使用collections模块中的Counter类,统计每个人名在文本中出现的次数,将结果存储在字典name_count中。
5. 使用Counter类的most_common方法,获取出现次数前15位的人物,存储在列表top_15中。most_common方法的参数指定要获取的元素个数。
6. 遍历列表top_15,输出每个人物的排名、名称和出现次数。
需要注意的是,这种方法只能统计人名在文本中出现的次数,并不能准确反映人物在故事中的重要程度。