python统计三国演义中人物出现的频次

方式一. 简化版

  1. 安装jieba库/numpy库
  2. 编程读取《三国演义》电子书,输出出场次数最高的10个人物名字

在这里插入图片描述
在这里插入图片描述

代码注释:

import numpy
import jieba# numpy输出有省略号的问题,无法显示全部数据
numpy.set_printoptions(threshold=numpy.inf)def readFile(path):with open(path, mode='r', encoding='utf-8') as f:try:data = f.read()if data is not None or data != '':return dataexcept:print("读取文件失败!")if __name__ == "__main__":# 读取文本内容text = readFile('三国演义.txt')# 搜索引擎模式:在精确模式基础上,对长词再次切分arr = jieba.cut_for_search(text)obj = {}for name in arr:# 分词长度为23收录对象if len(name) == 2 or len(name) == 3:# 定义对象属性和统计当前对象出现频次obj[name] = obj.get(name, 0) + 1# 对象转化为列表items = list(obj.items())"""提供同质数组基本类型的字符串基本字符串格式由3部分组成: 描述数据字节顺序的字符(<: little-endian,>: big-endian,|: not-relevant),给出数组基本类型的字符代码,以及提供类型使用的字节数的整数。基本类型字符代码为:代码	描述t	位字段(Bit field,后面的整数表示位字段中的位数)。b	Boolean(Boolean 整数类型,其中所有值仅为True或False)。i	Integer(整数)u	无符号整数(Unsigned integer)f	浮点数(Floating point)c	复浮点数(Complex floating point)m	时间增量(Timedelta)M	日期增量(Datetime)O	对象(即内存包含指向 PyObject 的指针)S	字符串(固定长度的char序列)U	Unicode(Py_UNICODE的固定长度序列)V	其他(void * - 每个项目都是固定大小的内存块"""people = numpy.dtype([('name', 'U2'), ('count', int)])# 列表转化为数组ar = numpy.array(items, dtype=people)"""axis=0 列递增kind='mergesort' 堆排序order='count' 排序字段flipud() 倒置排序"""
print(numpy.flipud(numpy.sort(ar, axis=0, kind='mergesort', order='count')))

二.方式二 词云统计–转自

Python 三国演义文本可视化(词云,人物关系图,主要人物出场次数,章回字数)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
alice_mask.png
在这里插入图片描述

在这里插入图片描述


# -*- coding: utf-8 -*-
"""
Created on Wed Jun 23 11:41:01 2021@author: 陈建兵
"""# 导入networkx,matplotlib包
import networkx as nx
import matplotlib.pyplot as plt
import jieba.posseg as pseg  # 引入词性标注接口
# 导入random包
import random
import codecs
# 导入pyecharts
from pyecharts import options as opts
# pyecharts 柱状图
from pyecharts.charts import Bar
# pyecharts 词云图
from pyecharts.charts import WordCloud
# pyecharts 折线/面积图
from pyecharts.charts import Line
# 词云
import wordcloud
import imageio# 定义主要人物的个数(用于人物关系图,人物出场次数可视化图)
mainTop = 15# 读取文本
def read_txt(filepath):file = open(filepath, 'r+', encoding='utf-8')txt = file.read()file.close()return txt# 获取小说文本
txt = read_txt('三国演义.txt')# 停词文档
def stopwordslist(filepath):stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]return stopwords# stopwords = stopwordslist('中文停用词库.txt')excludes = {'将军', '却说', '令人', '赶来', '徐州', '不见', '下马', '喊声', '因此', '未知', '大败', '百姓', '大事','一军', '之后', '接应', '起兵','成都', '原来', '江东', '正是', '忽然', '原来', '大叫', '上马', '天子', '一面', '太守', '不如', '忽报','后人', '背后', '先主', '此人','城中', '然后', '大军', '何不', '先生', '何故', '夫人', '不如', '先锋', '二人', '不可', '如何', '荆州','不能', '如此', '主公', '军士','商议', '引兵', '次日', '大喜', '魏兵', '军马', '于是', '东吴', '今日', '左右', '天下', '不敢', '陛下','人马', '不知', '都督', '汉中','一人', '众将', '后主', '只见', '蜀兵', '马军', '黄巾', '立功', '白发', '大吉', '红旗', '士卒', '钱粮','于汉', '郎舅', '龙凤', '古之', '白虎','古人云', '尔乃', '马飞报', '轩昂', '史官', '侍臣', '列阵', '玉玺', '车驾', '老夫', '伏兵', '都尉', '侍中','西凉', '安民', '张曰', '文武', '白旗','祖宗', '寻思'}  # 排除的词汇# 使用精确模式对文本进行分词
# words = jieba.lcut(txt)
counts = {}  # 通过键值对的形式存储词语及其出现的次数# 得到 分词和出现次数
def getWordTimes():# 分词,返回词性poss = pseg.cut(txt)for w in poss:if w.flag != 'nr' or len(w.word) < 2 or w.word in excludes:continue  # 当分词长度小于2或该词词性不为nr(人名)时认为该词不为人名elif w.word == '孔明' or w.word == '孔明曰' or w.word == '卧龙先生':real_word = '诸葛亮'elif w.word == '云长' or w.word == '关公曰' or w.word == '关公':real_word = '关羽'elif w.word == '玄德' or w.word == '玄德曰' or w.word == '玄德甚' or w.word == '玄德遂' or w.word == '玄德兵' or w.word == '玄德领' \or w.word == '玄德同' or w.word == '刘豫州' or w.word == '刘玄德':real_word = '刘备'elif w.word == '孟德' or w.word == '丞相' or w.word == '曹贼' or w.word == '阿瞒' or w.word == '曹丞相' or w.word == '曹将军':real_word = '曹操'elif w.word == '高祖':real_word = '刘邦'elif w.word == '光武':real_word = '刘秀'elif w.word == '桓帝':real_word = '刘志'elif w.word == '灵帝':real_word = '刘宏'elif w.word == '公瑾':real_word = '周瑜'elif w.word == '伯符':real_word = '孙策'elif w.word == '吕奉先' or w.word == '布乃' or w.word == '布大怒' or w.word == '吕布之':real_word = '吕布'elif w.word == '赵子龙' or w.word == '子龙':real_word = '赵云'elif w.word == '卓大喜' or w.word == '卓大怒':real_word = '董卓'  # 把相同意思的名字归为一个人else:real_word = w.wordcounts[real_word] = counts.get(real_word, 0) + 1getWordTimes()
items = list(counts.items())
# 进行降序排列 根据词语出现的次数进行从大到小排序
items.sort(key=lambda x: x[1], reverse=True)# 导出数据
# 分词生成人物词频(写入文档)
def wordFreq(filepath, topn):with codecs.open(filepath, "w", "utf-8") as f:for i in range(topn):word, count = items[i]f.write("{}:{}\n".format(word, count))# 生成词频文件
wordFreq("三国演义词频_人名.txt", 300)# 将txt文本里的数据转换为字典形式
fr = open('三国演义词频_人名.txt', 'r', encoding='utf-8')
dic = {}
keys = []  # 用来存储读取的顺序
for line in fr:# 去空白,并用split()方法返回列表v = line.strip().split(':')# print("v",v)   # v ['诸葛亮', '1373']# 拼接字典 {'诸葛亮', '1373'}dic[v[0]] = v[1]keys.append(v[0])
fr.close()
# 输出前几个的键值对
print("人物出现次数TOP", mainTop)
print(list(dic.items())[:mainTop])#  绘图
# 人名列表 (用于人物关系图,pyecharts人物出场次数图)
list_name = list(dic.keys())  # 人名
list_name_times = list(dic.values())  # 提取字典里的数据作为绘图数据# 可视化人物出场次数
def creat_people_view():bar = Bar()bar.add_xaxis(list_name[0:mainTop])bar.add_yaxis("人物出场次数", list_name_times)bar.set_global_opts(title_opts=opts.TitleOpts(title="人物出场次数可视化图", subtitle="三国人物TOP" + str(mainTop)),toolbox_opts=opts.ToolboxOpts(is_show=True),xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate": 45}))bar.set_series_opts(label_opts=opts.LabelOpts(position="top"))bar.render_notebook()  # 在 notebook 中展示# make_snapshot(snapshot, bar.render(), "bar.png")# 生成 html 文件bar.render("三国演义人物出场次数可视化图.html")# 生成词云
def creat_wordcloud():bg_pic = imageio.imread(uri='alice_mask.png')wc = wordcloud.WordCloud(font_path='c:\Windows\Fonts\simhei.ttf',background_color='white',width=1000, height=800,# stopwords=excludes,# 设置停用词max_words=500,mask=bg_pic  # mask参数设置词云形状)# 从单词和频率创建词云wc.generate_from_frequencies(counts)# generate(text)  根据文本生成词云# wc.generate(txt)# 保存图片wc.to_file('三国演义词云_人名.png')#  显示词云图片plt.imshow(wc)plt.axis('off')plt.show()# 使用pyecharts 的方法生成词云
def creat_wordcloud_pyecharts():wordsAndTimes = list(dic.items())(WordCloud().add(series_name="人物次数", data_pair=wordsAndTimes,word_size_range=[20, 100], textstyle_opts=opts.TextStyleOpts(font_family="cursive"), ).set_global_opts(title_opts=opts.TitleOpts(title="三国演义词云")).render("三国演义词云_人名.html"))# 使用pyecharts 的方法生成章回字数
def chapter_word():# 进行章回切片list2 = txt.split("------------")chapter_list = [i for i in range((len(list2)))]word_list = [len(i) for i in list2](Line(init_opts=opts.InitOpts(width="1400px", height="700px")).add_xaxis(xaxis_data=chapter_list).add_yaxis(series_name="章回字数",y_axis=word_list,markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),]),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="平均值")]),).set_global_opts(title_opts=opts.TitleOpts(title="三国演义章回字数", subtitle=""),tooltip_opts=opts.TooltipOpts(trigger="axis"),toolbox_opts=opts.ToolboxOpts(is_show=True),xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),).render("三国演义章回字数.html"))# 颜色生成
colorNum = len(list_name[0:mainTop])# print('颜色数',colorNum)
def randomcolor():colorArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']color = ""for i in range(6):color += colorArr[random.randint(0, 14)]return "#" + colordef color_list():colorList = []for i in range(colorNum):colorList.append(randomcolor())return colorList# 解决中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签# 生成人物关系图
def creat_relationship():# 人物节点颜色colors = color_list()Names = list_name[0:mainTop]relations = {}# 按段落划分,假设在同一段落中出现的人物具有共现关系lst_para = (txt).split('\n')  # lst_para是每一段for text in lst_para:for name_0 in Names:if name_0 in text:for name_1 in Names:if name_1 in text and name_0 != name_1 and (name_1, name_0) not in relations:relations[(name_0, name_1)] = relations.get((name_0, name_1), 0) + 1maxRela = max([v for k, v in relations.items()])relations = {k: v / maxRela for k, v in relations.items()}# return relationsplt.figure(figsize=(15, 15))# 创建无多重边无向图G = nx.Graph()for k, v in relations.items():G.add_edge(k[0], k[1], weight=v)# 筛选权重大于0.6的边elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] > 0.6]# 筛选权重大于0.3小于0.6的边emidle = [(u, v) for (u, v, d) in G.edges(data=True) if (d['weight'] > 0.3) & (d['weight'] <= 0.6)]# 筛选权重小于0.3的边esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] <= 0.3]# 设置图形布局pos = nx.spring_layout(G)  # 用Fruchterman-Reingold算法排列节点(样子类似多中心放射状)# 设置节点样式nx.draw_networkx_nodes(G, pos, alpha=0.8, node_size=1300, node_color=colors)# 设置大于0.6的边的样式nx.draw_networkx_edges(G, pos, edgelist=elarge, width=2.5, alpha=0.9, edge_color='g')# 0.3~0.6nx.draw_networkx_edges(G, pos, edgelist=emidle, width=1.5, alpha=0.6, edge_color='y')# <0.3nx.draw_networkx_edges(G, pos, edgelist=esmall, width=1, alpha=0.4, edge_color='b', style='dashed')nx.draw_networkx_labels(G, pos, font_size=14)plt.title("《三国演义》主要人物社交关系网络图")# 关闭坐标轴plt.axis('off')# 保存图表plt.savefig('《三国演义》主要人物社交关系网络图.png', bbox_inches='tight')plt.show()def main():# 人物出场次数可视化图creat_people_view()# 词云图creat_wordcloud()creat_wordcloud_pyecharts()# 人物关系图creat_relationship()# 章回字数chapter_word()if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28418.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对行业大模型的思考

深度学习自然语言处理 分享知乎&#xff1a;黄文灏职位&#xff1a;北京智源AI研究院技术负责人 看到了 Naiyan Wang[1] 和 刘聪NLP[2] 的两篇文章&#xff0c;都提到了对行业大模型的一些看法&#xff0c;有很多相同的想法。正好身边有很多人在讨论行业大模型&#xff0c;想要…

浅谈爆火的AIGC会不会是下一个元宇宙?

OpenAI终于发布了ChatGPT安全方法&#xff0c;这距离意大利政府公开宣布全面禁止ChatGPT还不到一周。 ChatGPT对隐私规则的侵犯和版权问题的触及&#xff0c;伴随一季度迅速在全球范围内的爆火而出现。 紧随意大利的是&#xff0c;德国、日本、法国、加拿大和美国&#xff0c…

斯坦福大学AI课程;创始人剽窃丑闻后 Stability AI 两名高管离职,公司前景存疑

&#x1f989; AI新闻 &#x1f680; Windows Copilot&#xff1a;微软的智能AI助手助力Windows操作系统革命 摘要&#xff1a;微软发布了Windows Copilot的开发者预览版更新。Windows Copilot是微软最新推出的智能助手&#xff0c;通过它用户可以无门槛地使用Windows的各种功…

入职仅1年,谷歌高管不满开发方向后离职!网友:“雪上加霜,谷歌AR业务要凉凉?”...

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 过去数月&#xff0c;谷歌的 AR 业务可谓是「动荡不安」—— 裁员、改组、 AR/VR 主管 Clay Bavor 离职。 昨天&#xff0c;谷歌人事变动再起&#xff0c; AR 操作系统团队负责人 Mark …

2023 年 4 月很火的网站

最近chatgpt持续火热&#xff0c;基于chatgpt的网站/工具越来越多&#xff0c;今天分享几个很火的网站&#xff0c;之前分享过的上百个实用网站同步到我的博客了 https://sushengbuhuo.github.io/blog chatdoc 一个基于 ChatGPT 的文档阅读助手http://www.chatdoc.com &#x…

现场拔网线!第四范式版GPT能力首秀,有点不一样

金磊 发自 第四范式大厦量子位 | 公众号 QbitAI 国产大模型能大战&#xff0c;又有一员猛将入局。 就在刚刚&#xff0c;第四范式自研大模型“式说”&#xff08;4Paradigm SageGPT&#xff09;在上线2个月后&#xff0c;终于来了一波能力首秀。 而且纵观整场活动的发布&#x…

2023 AI大语言模型TOP10

注&#xff1a;本次评测时间截至2023.5.10&#xff0c;评价指标主要包括语义理解、逻辑推理、情感分析、百科知识、文本质量五个维度&#xff09; 今年春节档&#xff0c;一部《流浪地球2》点燃了沉寂许久的中国科幻电影市场&#xff0c;也让MOSS这一电影里冷酷无情的强人工智能…

百度搜索迎来奇点 大模型掀起代际变革

每一轮技术革命掀起的浪潮&#xff0c;大部多数人还没来得及思考或者布局&#xff0c;已经消失于海浪中。机会是给有准备的人的&#xff0c;要发现新兴技术的亮点&#xff0c;并立足自身去积极拥抱它&#xff0c;最后转化为自身前进的动力&#xff0c;跨越周期&#xff0c;迎来…

劲爆!154页微软GPT研究报告:人工通用智能的火花,GPT-4的早期实验

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年2月份热门报告合集 ChatGPT调研报告&#xff08;仅供内部参考&#xff09; 文心一言、GPT3.5及GPT4应用测评对比报告 ChatGPT团队背景研究报告 ChatGPT的发展历程、原…

这 7个 AI 写作助手,太实用了

想象一下&#xff1a;你正在办公桌前为你的广告输入标题&#xff0c;但你突然思维阻塞并卡住了&#xff0c;可惜这时还没有神奇的软件可以帮助你想出点子。或许是有的&#xff1f; 2023 年&#xff0c;AI 写作工具似乎不可避免地会很快融入我们的工作流程中。现代知识工作者已…

怎样让chatGPT给你打工然后月入过百?(二)

上一篇&#xff1a;怎样让chatGPT给你打工然后月入过千&#xff1f; 前言 过千不现实&#xff0c;实测了一个月&#xff08;2月份测的&#xff09;&#xff0c;收入 当时文库任务的行情好&#xff0c;每天都有任务&#xff0c;现在不行了经常刷不出任务&#xff0c;而且脚本…

2022软件质量与管理-考题复习

最下面有2022的软件工程与管理考题~ 简答题 【2021】估算的要点(10分) 尽可能划分详细一些&#xff1b; 建立对估算结果的信心&#xff1b; 依赖数据&#xff1b; 估算是利益相关者达成共识的过程&#xff0c;而不是结果。 【2021】基于Yield构建预测模型(10分) 基于Yield指标构…

私有部署、重构企业软件,第四范式发布大模型“式说”

大模型领域再添重要一员&#xff01; 4月26日&#xff0c;第四范式首次向公众展示其大模型产品「式说3.0」&#xff0c;并首次提出AIGS战略&#xff08;AI-Generated Software&#xff09;&#xff1a;以生成式AI重构企业软件。式说将定位为基于多模态大模型的新型开发平台&…

从0到1使用chatGPT以及简单调用JAVA api实现网页的交互

文章目录 前言注册过程如何使得提示词更加的准确&#xff1f;api的简单调用用httpclient去手动填充请求头现成封装的方法 最终效果 前言 本文探讨的是从0到1&#xff0c;如何注册GPT账号&#xff0c;如何编写提示词&#xff08;prompt&#xff09;&#xff0c;以及简单的java调…

Laf 的价格被打下来了,最高买一送一!(限时五天)

Laf 公众号已接入了 GPT4&#xff0c;完全免费&#xff01;欢迎前来调戏&#x1f447; Laf 上线以来本着丝滑的用户体验&#xff0c;良心的价格&#xff0c;收获众多用户好评&#xff0c;为了回馈新老用户的支持与厚爱&#xff0c;本次 618 放出了巨额优惠&#xff0c;最高可买…

人人都能接入 Claude,赚取自己的第二桶金

Laf 公众号已接入了 AI 绘画工具 Midjourney&#xff0c;可以让你轻松画出很多“大师”级的作品。同时还接入了 AI 聊天机器人&#xff0c;支持 GPT、Claude 以及 Laf 专有模型&#xff0c;可通过指令来随意切换模型。欢迎前来调戏&#x1f447; <<< 左右滑动见更多 &…

神理论 | 我面向淘宝编程,而你面向什么编程?(文末赠书5本)

神理论 | 我面向淘宝编程&#xff0c;而你面向什么编程&#xff1f; 陌生人一定会疑问&#xff0c;嵌入式跟taobao有半毛钱关系啊&#xff1f;那么本文&#xff0c;博主就跟你聊聊&#xff0c;如何面向淘宝学习嵌入式&#xff01; 文章目录 1 写在前面2 面向XXX编程3 面向淘宝学…

一致性哈希(哈希环)解决数据分布问题

哈希算法是程序开发过程中最广泛接触到的的算法之一&#xff0c;典型的应用有安全加密、数据校验、唯一标识、散列函数、负载均衡、数据分片、分布式存储。前些天刚接触到夜莺项目&#xff0c;听介绍目前V6版本集群方式部署&#xff0c;告警生成是通过一致性哈希&#xff08;哈…

墨尔本python培训班_墨尔本大学商业专业

澳大利亚墨尔本大学作为国际知名的高等教育学府&#xff0c;一直以来在各个专业领域都有着十分出色的表现。墨尔本大学商业专业在最近几年逐渐受到广泛的关注&#xff0c;每年申请留学的人数不断增加。墨尔本大学商业专业是一门综合性的专业课程&#xff0c;该专业毕业生的就业…

墨尔本学计算机硕士专业,2020年墨尔本大学计算机硕士详细介绍

墨尔本大学计算机硕士课程中被ACS(澳大利亚计算机协会)认证的课程&#xff1a; (1)Master of Information Systems (12 subject program) (CRICOS duration: 78 weeks): 学制为1.5年&#xff0c;2月和7月开学;此课程对申请人的本科专业背景无限制性要求&#xff0c;但是要求有一…