3.编写程序统计《三国演义》人物出场:输入电子版《三国演义》文本,输出出场率最高的15个人物和次数。
时间: 2024-05-09 12:15:39 浏览: 12
以下是基于Python的程序,可以统计《三国演义》中人物的出场次数,并输出出场率最高的前15个人物及其出场次数:
```python
import re
# 读取文件内容
with open('sgyy.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 使用正则表达式匹配人物名称,统计出现次数
name_dict = {}
pattern = re.compile(r'[\u4e00-\u9fa5]{2,5}(?:·[\u4e00-\u9fa5]{2,5})*')
matches = pattern.findall(content)
for name in matches:
if name in name_dict:
name_dict[name] += 1
else:
name_dict[name] = 1
# 按出现次数排序并输出前15个
sorted_names = sorted(name_dict.items(), key=lambda x: x[1], reverse=True)[:15]
for name, count in sorted_names:
print(f'{name} 出现次数:{count}')
```
注:本程序假设《三国演义》的电子版文本文件名为 `sgyy.txt`,需要将程序中的文件名修改为实际的文件名。若电子版文本与程序在同一目录下,则只需将文件名改为 `sgyy.txt` 即可。
相关问题
编写程序统计《三国演义》人物出场:输入电子版《三国演义》文本,输出出场率最高的15个人物和次数。
这个问题可以通过Python编程实现。以下是一个可能的解决方案:
```python
import re
from collections import Counter
# 读取文本文件
with open('sgyy.txt', 'r', encoding='utf-8') as f:
sgyy = f.read()
# 使用正则表达式匹配人物名字
pattern = re.compile('[^\u4e00-\u9fa5]+')
sgyy = re.sub(pattern, '', sgyy)
pattern = re.compile('[\n]+')
sgyy = re.sub(pattern, '', sgyy)
pattern = re.compile('[' + '\u3000' + ']+')
sgyy = re.sub(pattern, '', sgyy)
pattern = re.compile('[' + '\u0020' + ']+')
sgyy = re.sub(pattern, '', sgyy)
# 统计人物出现次数
names = re.findall('[\u4e00-\u9fa5]{2,}', sgyy)
name_count = Counter(names)
# 输出前15名
top15 = name_count.most_common(15)
for i, (name, count) in enumerate(top15):
print('第{}名: {},出现次数:{}'.format(i+1, name, count))
```
解释一下上述代码的实现过程:
首先我们打开《三国演义》的文本文件,使用正则表达式清洗文本(去除空格、换行符等)。然后我们使用正则表达式匹配人名,统计出现次数。最后使用Counter类对人名出现次数进行统计,并输出前15名。
注意:由于《三国演义》中许多人物都有重名,因此我们在统计人物出现次数时需要特别注意。
编写python程序对《三国演义》人物出场次数进行中文文本词频统计,输出排序前 5 的人物 以及出场次数。
好的,下面是用 Python 编写的程序,对《三国演义》人物出场次数进行中文文本词频统计,并输出排序前 5 的人物以及出场次数:
```python
import jieba
from collections import Counter
# 读取《三国演义》文本
with open("sgyy.txt", "r", encoding="utf-8") as f:
text = f.read()
# 对文本进行分词
words = [word for word in jieba.cut(text) if len(word) >= 2]
# 统计人物出现的次数
counter = Counter()
for i in range(len(words) - 1):
if words[i] == "关于":
if "【" in words[i+1]:
name = words[i+1].replace("【", "").replace("】", "")
counter[name] += 1
# 输出排序前 5 的人物以及出场次数
top5 = counter.most_common(5)
for i, (name, count) in enumerate(top5):
print(f"第{i+1}名:{name},出场次数:{count}")
```
这个程序的逻辑很简单。我们首先使用 jieba 分词库对《三国演义》文本进行分词,然后统计人物出现的次数。具体地,我们在分词结果中找到“关于”一词,并检查其后面的词是否包含人物名称。如果是,则将该人物的出场次数加 1。最后,我们使用 collections 模块的 Counter 类来对人物出场次数进行统计,并输出排序前 5 的人物以及出场次数。
请注意:由于本程序使用了 jieba 分词库,请确保您已经安装了该库。如果没有安装,可以在命令行中使用以下命令进行安装:
```
pip install jieba
```
此外,本程序需要一个名为 `sgyy.txt` 的文本文件,其中包含《三国演义》的全文。如果您没有这个文件,可以在网上下载或自行创建。
希望这个程序能够帮到你!