编写python程序,统计,《三国演义》中前20位出场的人物的次数

时间: 2024-03-14 15:45:42 浏览: 24
好的,我可以帮你编写这个程序。不过在开始之前,需要先将《三国演义》的文本文件准备好,并保存在程序可以访问的路径下。 以下是可能的程序实现方式: ```python import re # 读取《三国演义》文本文件 with open('path/to/sgyy.txt', 'r', encoding='utf-8') as f: sgyy = f.read() # 使用正则表达式匹配出所有人物名称 pattern = r'[\u4e00-\u9fa5]{2,5}(?:·[\u4e00-\u9fa5]{2,5})*' matches = re.findall(pattern, sgyy) # 统计人物出场次数 count_dict = {} for name in matches: count_dict[name] = count_dict.get(name, 0) + 1 # 获取前20个出场最多的人物 top20 = sorted(count_dict.items(), key=lambda x: x[1], reverse=True)[:20] # 输出结果 for i, (name, count) in enumerate(top20): print(f'{i+1}. {name}: {count}次') ``` 需要注意的是,以上程序只是一个可能的实现方式,具体实现可能会因文本格式、文本内容等因素而有所不同,需要根据具体情况进行调整。
相关问题

编写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` 的文本文件,其中包含《三国演义》的全文。如果您没有这个文件,可以在网上下载或自行创建。 希望这个程序能够帮到你!

用python编写程序完成《三国演义》人物出场统计。

以下是两种Python编写程序完成《三国演义》人物出场统计的方法: 1. 使用jieba库进行分词和统计 ```python import jieba # 读取文件 with open('sgyy.txt', 'r', encoding='utf-8') as f: sgyy = f.read() # 分词 words = jieba.lcut(sgyy) # 统计词频 counts = {} for word in words: if len(word) == 1: # 排除单个字符的分词结果 continue else: counts[word] = counts.get(word, 0) + 1 # 输出出现次数最多的前10个人物 items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) for i in range(10): word, count = items[i] print("{0:<10}{1:>5}".format(word, count)) ``` 2. 使用numpy库进行统计 ```python import numpy as np # 读取文件 with open('sgyy.txt', 'r', encoding='utf-8') as f: sgyy = f.read() # 将文本转换为数组 text_arr = np.array(list(sgyy)) # 统计出现次数 unique, counts = np.unique(text_arr, return_counts=True) # 将结果合并为字典 result_dict = dict(zip(unique, counts)) # 输出出现次数最多的前10个人物 items = list(result_dict.items()) items.sort(key=lambda x: x[1], reverse=True) for i in range(10): word, count = items[i] print("{0:<10}{1:>5}".format(word, count)) ```

相关推荐

最新推荐

recommend-type

MOOC《Python语言程序设计》第6周练习题

讲解2个颇有用处的实例:基本统计值计算和文本词频统计,其中,即有英文Hamlet的词频统计,也有中文《三国演义》的人物出场统计;进一步讲解用于中文分词的jieba库,从此以后,处理中英文文本、做些统计分析将不再是...
recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
recommend-type

matlab基于RRT和人工势场法混合算法的路径规划.zip

matlab基于RRT和人工势场法混合算法的路径规划.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。