三国演义人物统计python
时间: 2023-07-08 17:53:53 浏览: 143
好的,以下是一个简单的Python代码,可以实现对《三国演义》人物的统计:
```python
# 读取三国演义文本文件
filename = 'sanguo.txt'
with open(filename, 'r', encoding='utf-8') as f:
sanguo = f.read()
# 统计人物出现次数
word_count = {}
for line in sanguo.split('\n'):
for char in line:
if char in {',', '。', '?', '!', ':', ';'}:
continue
if char in word_count:
word_count[char] += 1
else:
word_count[char] = 1
# 输出出现次数最多的前20个人物
top20 = sorted(word_count.items(), key=lambda x: x[1], reverse=True)[:20]
for item in top20:
print(item[0], item[1])
```
这段代码会读取当前目录下名为 `sanguo.txt` 的文本文件,统计其中每个汉字出现的次数,并输出出现次数最多的前20个人物。请注意,这个代码只是一个简单的示例,实际应用中还涉及到人名的识别和过滤等问题。
相关问题
python三国演义人物 统计分析_Python统计三国演义主要人物出场次数
好的,我可以为您介绍如何使用Python进行统计分析,统计三国演义主要人物出场次数。
首先,我们需要将《三国演义》的文本数据导入Python中。您可以在网上搜索到该书的txt格式文件,将其下载到本地。
接着,我们需要使用Python的文件读取功能将文本数据导入到程序中。可以使用以下代码:
```python
with open('三国演义.txt', 'r', encoding='utf-8') as f:
text = f.read()
```
以上代码中,我们使用`open()`函数打开文本文件,并使用`read()`方法读取其中的内容。由于该书是以utf-8编码格式保存的,因此我们需要指定`encoding='utf-8'`来正确读取其中的中文字符。
接下来,我们需要使用Python的正则表达式模块`re`来匹配人物名称。可以使用以下代码:
```python
import re
# 匹配人物名称
pattern = re.compile('[\u4e00-\u9fa5]{2,5}(?:·[\u4e00-\u9fa5]{2,5})*')
names = re.findall(pattern, text)
```
以上代码中,我们使用`re.compile()`函数定义了一个正则表达式模式,用于匹配人物名称。该模式匹配2到5个汉字,中间可以包含一个或多个“·”符号。然后使用`re.findall()`方法在整个文本中查找符合模式的所有字符串,并将其保存在`names`列表中。
最后,我们可以使用Python的`collections`模块中的`Counter`类来统计每个人物出现的次数。可以使用以下代码:
```python
from collections import Counter
# 统计人物出现次数
name_counts = Counter(names)
```
以上代码中,我们使用`Counter`类对`names`列表中的人物名称进行计数,并将结果保存在`name_counts`字典中。
现在,`name_counts`字典中存储了三国演义中所有人物出现的次数。您可以使用以下代码查看前10名出场次数最多的人物:
```python
# 输出前10名出场次数最多的人物
top10 = name_counts.most_common(10)
for name, count in top10:
print(name, count)
```
以上代码中,我们使用`most_common()`方法获取出场次数最多的前10名人物,并使用`for`循环逐个输出其名称和出场次数。
希望以上内容能够帮助您完成Python统计三国演义主要人物出场次数的任务。
三国演义红人统计python
可以使用Python中的正则表达式和字典来统计三国演义中出现频率较高的人物。以下是一个示例代码:
```python
import re
# 读取三国演义文本
with open("sgyy.txt", "r", encoding="utf-8") as f:
sgyy = f.read()
# 使用正则表达式匹配人名
pattern = re.compile("[\u4e00-\u9fa5]{2,4}(?:·[\u4e00-\u9fa5]{2,4})*")
names = re.findall(pattern, sgyy)
# 统计人名出现频率
name_dict = {}
for name in names:
if name in name_dict:
name_dict[name] += 1
else:
name_dict[name] = 1
# 按出现频率排序
sorted_name_dict = sorted(name_dict.items(), key=lambda x: x[1], reverse=True)
# 输出前十位红人
print("三国演义红人统计:")
for i in range(10):
print(sorted_name_dict[i][0], "出现了", sorted_name_dict[i][1], "次")
```
需要注意的是,这里使用了一个简单的中文人名正则表达式,可能无法完全覆盖所有情况,因此统计结果可能会略有偏差。
阅读全文