百科问答小站 logo
百科问答小站 font logo



《三国演义》的第一男主角是谁? 第1页

  

user avatar   joyyiyi-35 网友的相关建议: 
      

用数据说话,是曹操,不会是刘备。

如果你不同意我的观点,你是对的。

本文用Python对罗贯中《三国演义》文本中人物出现次数进行了统计排序,并进行可视化展示,最后对小说人物进行了词云分析。

人物词云:


人物出场次数可视化展示:

程序输出结果:

曹操 1428

孔明 1373

刘备 1222

关羽 779

张飞 348

吕布 300

孙权 264

赵云 255

司马懿 219

周瑜 217

袁绍 190

马超 185

魏延 177

经知友 @独寻夜影 提醒,刘备还应该包括刘皇叔,刘豫州,先主这个称呼暂不采信。经过修改,得到刘备出现次数为1285次,比之前增加了63次。排名顺序没有改变。

本回答仅根据我手中下载的三国演义文本以及同人不同名的初步定义做出精确的统计及展示。主要目的在于学习Python,附代码及解析。

这是我学python路上的一次尝试,真正的主角是多维度的,本文仅从数据视角考虑问题。

关于同人不同名的定义,欢迎指正。我会采信我认为正确的进行修改调整。

同人不同名初步定义如下:

孔明包括诸葛亮和孔明曰。

刘备包括刘皇叔,刘豫州,玄德,玄德曰。

曹操包括孟德,丞相。

关羽包括关公,云长。

关于丞相的定义,会存在一定的争议,部分指代曹操,也有孔明。我的第一反应是曹操。

曹操是我比较喜欢的人物,别的先不说,他写的诗有气势,我很喜欢。孙权的戏份有点少。

大体思路是用jieba库进行分词,排除掉一些非人名词语,对同人非同名人物进行合并。然后对人物频率进行统计排序。最后生成词云图。

由于文本版本不同,统计结果有些许差异。该结果与《Python语言程序设计基础》中的例题数据有一点点差别,大体排序是一致的。例题用的排除法,我用的是停用词库,更方便快捷,并进行词云展示。

书中示例的结果为:

python123.io/s/1605 (二维码自动识别)


1.分词

       #分词 import jieba txt=open("三国演义.txt",'r',encoding = 'UTF-8').read() words=jieba.lcut(txt)   #精确模式分词,重点1 counts={}   #创建字典,存放人名word和次数count for word in words:  if len(word)==1:  #排除一个字(非人名)  continue  #同人不同名合并  elif word == "诸葛亮" or word == "孔明曰":  rword = "孔明"  elif word == "关公" or word == "云长":  rword = "关羽"  elif word == "玄德" or word == "玄德曰":  rword = "刘备"  elif word == "孟德" or word == "丞相":  rword = "曹操"  else:  rword=word     counts[rword]=counts.get(rword,0)+1  #重点2 #排除非人名词语 with open('停用词库.txt', 'r', encoding='UTF-8') as meaninglessFile:  stopwords = set(meaninglessFile.read().split('
')) for word in stopwords:  del(counts[word]) items=list(counts.items()) #将字典转换为列表 items.sort(key=lambda x:x[1],reverse=True)  #重点3 num=13 #打印出场数前num的人名 for i in range(num):  word,count=items[i]  print("{0:<13}{1:>3}".format(word,count))     

讲解:

1.jieba库是Python的第三方中文分词库,安装方法:

pip install jieba

对于英文来说,用split()方法即可。

2.counts[rword]=counts.get(rword,0)+1

counts.get(rword,0)方法表示:如果键rword在字典counts中,就返回rword对应的值;否则,返回0。

3.items.sort(key=lambda x:x[1],reverse=True)

按列表items的第二个字段的倒序重新排序。

4.这段代码主要分三步走:

获取文本文件,进行分词;

对每个词进行计数;

对单词频率排序。

2.人物出场次数进行数据存储和可视化

       #导出数据 fo = open("人物出场次数.txt", "a", encoding='utf-8') for i in range(num):  word, count=items[i]    word = str(word)    count = str(count)    fo.write(word)    fo.write(':') #使用冒号分开  fo.write(count)    fo.write('
') #换行 fo.close() #关闭文件  #将txt文本里的数据转换为字典 fr = open('人物出场次数.txt', 'r',encoding='utf-8' ) dic = {} keys = [] # 用来存储读取的顺序 for line in fr:  v = line.strip().split(':')   dic[v[0]] = v[1]   keys.append(v[0]) fr.close() print(dic)  # 绘柱状图 from pyecharts.charts import Bar #从pyecharts库中导入Bar子类 list1=list(dic.keys())    #人物 list2=list(dic.values())  #出场次数 bar = Bar() #定义柱状图 bar.add_xaxis(list1) bar.add_yaxis("人物出场次数",list2,) bar.render("人物出场次数可视化图.html")  #生成render.html文件  # 绘极坐标图 from pyecharts import options as opts #list1.sort(reverse=True) #list2.sort(reverse=True) polar = (     Polar()     .add_schema(         radiusaxis_opts=opts.RadiusAxisOpts(data=list1, type_="category"),     )     .add("", list2, type_='bar') ) #polar.render_notebook() polar.render("人物出场次数极坐标图.html")     

讲解:

1.将出场次数排名前13的保存文件,并保存到dic的字典中。

2.strip()用于移除字符串头尾指定的字符(默认为空格或换行符)。

str.split(str="", num=string.count(str)) 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。

3.知识点:字典dic中添加键值对的方法。

dic[v[0]] = v[1]

4.柱状图部分别以字典dic的键和值为横纵坐标进行画图。

3.生成人物词云

       #词云分析 import wordcloud import matplotlib.pyplot as plt import numpy                        # numpy数据处理库 from PIL import Image               # 图像处理库 mask = numpy.array(Image.open( '背景.jpg'))      # 定义词频背景 # 设置词云相关参数 wc = wordcloud.WordCloud(  font_path = 'C:WindowsFontsmsyh.ttc', # 设置字体(这里选择“仿宋”)  background_color='white',                   # 背景颜色  mask = mask,                                # 文字颜色+形状(有mask参数再设定宽高是无效的)  max_words = num,                         # 显示词数  max_font_size = 150 ,                        # 最大字号  stopwords={'曰'},  # 设置停用词,不再词云图中表示 ) wc.generate_from_frequencies(counts) wc.recolor(color_func=wordcloud.ImageColorGenerator(mask)) plt.imshow(wc) plt.axis("off") plt.show() wc.to_file( '词云.jpg')     

讲解:

1.wordcloud是Python词云展示第三方库,以词语为基本单位,通过图形可视化的方式,可以更加直观和艺术的展示文本。

2.最常用的方法是用wc.generate(text)直接生成词云。

3.generate_from_frequencies(counts):已知词及其对应的词频,注意括号中为字典格式。

我是 @三阳开泰 ,一个易经爱好者。一个有营养,有涵养,有教养的人,简称Three Yang。

个人代表作:

如何系统地自学 Python?

怎样自学易经?

想学易学,入门有什么书籍推荐?

【参考】:

[1] 嵩天.Python语言程序设计基础.高等教育出版社[M],2019.

[2] Eric Mathes.Python编程从入门到实践.人民邮电出版社[M],2020.

[3] Python之wordcloud库使用_jinsefm的博客-CSDN博客

[4] python三国演义人物 统计分析_使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。..._weixin_39734493的博客-CSDN博客

[5] Python爬虫爬取哈利波特小说,并用数据可视化分析出场人物 - 知乎 (zhihu.com)

[5] python实现对小说的文本分析(人物关系图,人物词云等)_YouYang_Wang的博客-CSDN博客_python小说文本分析


user avatar   blackwarrior-63 网友的相关建议: 
      

首先否定一些机械性的算法,认为提到的人名最多次数,或者相关关系最多的统计方法等等,提炼出来男主角。

这种想法来处理文学是不行的,人脑还是要比这么简单的算法复杂多了。

就像笑傲江湖里的东方不败只出场一次,这个形象就成为了一个经久不衰的话题。出现5分钟,讨论50年。

一个小说人物重要与否,不能看他的出现次数,描述多少,重要的是看作者的立意,他想表达什么,有的作者功力深厚,草蛇灰线,伏线千里。有的作者,会用一本书的时间去准备情节,只为了最后的高潮。


我们看谁是男主角,要看罗贯中在塑造什么,在表达什么,不能看谁出场多,谁强大。

这里面要注意一点,历史上的三国人物和罗贯中笔下的三国人物是不一样的。讨论三国演义的主角,就不能拿三国历史上的人物来套。

三国演义里的刘备是个哭唧唧的形象,历史上的刘备是个尸体堆里爬出来的枭雄,鞭打督邮,铁打的硬汉。

所以讨论谁是主角,关键只看罗贯中笔下的人物形象。

那么我们把刘备,曹操,孙权集团在罗贯中形象做一个比较,比较容易得出以刘备为主的集团是主角阵营,孙权集团是配角阵营,曹操集团是反派阵营。

刘备集团的特点:

刘备,仁厚长者

张飞,勇气和脾气火爆,性情纯真

关羽,忠义无双,智勇双全

诸葛亮,无所不能,鞠躬尽瘁死而后已

赵云,有情有义,为了蜀国战斗到死,低调又有魅力

姜维,蜀国灭亡时,战斗到最后一刻的蜀国精神

北地王,蜀汉最后的气节。

刘禅,即使昏庸,仍被爱戴。

就连给关羽拿刀的小人物廖化,都尽忠到最后。


东吴集团的特点:

孙权:外宽內忌

张昭:大战来临,先想投降

周瑜:既生瑜,何生亮,心眼小

吕蒙:背盟小人

陆逊:优秀人才,无奈最后郁郁而终

诸葛瑾:谨慎小心,但是孩子却高傲自负


总体而言,孙权集团,有正面有负面,但没什么大作为。(不是指历史上)

曹操集团:

曹操:梦中杀人,借粮官人头平军心,杨修戳中心事,杀死杨修,睡别人嫂子害死大将,为曹操建功立业的荀彧,荀攸因维护大汉,接连被迫害致死。

和陈宫一块逃亡途中,因听到一句话,杀死朋友整族几十口人。借刀杀人祢衡,害死大儒孔融。

曹操的形象,明显是一个非常有能力的反派,他能做出功业,但是他阴险狡诈狠毒,并且多疑,你在他身上看不到真善美。(仅指三国演义的塑造)

荀彧,荀攸,皆为正面角色,但被君主害死。

郭嘉才华纵横,但是早死。

邓艾,非常有才干,却最后死于算计。

曹操集团最后剩下的人物都是隐忍,善于权谋的政客,在他们身上已经看不到人性的光辉,全是官僚机器的冷漠,残忍。

代表人物:低调保存自己的贾诩,功利主义的钟会,善于钻营的华歆,险些逼死亲弟弟,逼他七步作诗的曹丕,三代托孤重臣,却偷了魏国的司马懿,以及路人皆知其野心的司马昭。


所以从人物刻画来看,至少可以确定刘备集团是主角团,魏国集团和东吴集团不是。

那么刘备集团谁是主角中的主角呢?

咱就得看罗贯中的描述。

刘备是一个串联整个三国上半场的引线人物,也是刘备集团的核心人物,没有他,就没有关羽张飞诸葛亮。

但是如果我们把刘备的经历做一个划分,可以非常简单看到刘备有两个重大区别的阶段:事事不顺,颠沛流离的时期;王业露出曙光的时期。

而这两个时期,最关键的区别就在于一点:三顾茅庐,请来了诸葛亮。

手机没电了,有空再说。


user avatar   qi-da-fang 网友的相关建议: 
      

是刘备。另外曹操是前三国时期的副主角,诸葛亮是中三国时期的主角,关羽是《演义》价值观的代言人。刘备和三绝之后,就是桃园三弟张飞、东吴大帝孙权、全民偶像赵云、前三国第一配角袁绍、中三国第一配角司马懿、后三国主角姜维、演义高潮赤壁之战主角周瑜、“人马之间汉末两绝”的吕布、留下了争议话题的魏延。


拿数据图表说话,先上一张《三国演义人物存在感》气泡图:

出场次数指标,刘备高于诸葛亮,明显高于曹操,更明显高于关羽。

出场回数指标,曹操微高于刘备,明显高于诸葛亮,更明显高于关羽和孙权。

显眼程度指标,刘备微高于诸葛亮,明显高于邓艾、吕布和关羽,这项曹操排名第12。

——显而易见,演义的第一主角是刘备,“三绝”曹操、诸葛亮、关羽排在第二到第四。


——插一句:不少朋友认为我只会玩数据,那看看我的《演义》回答吧:新浪三国有遗篇


继续,如果换一个思路,逐个章节分析主角,最后汇总呢?

祭天地桃园结义:
1.刘备
2.张角
3.张飞

刘玄德斩寇立功:
……

略去琐碎的计算过程,结论如下:

1.刘备:907
2.诸葛亮:802
3.曹操:783
4.关羽:375
5.孙权:284
6.赵云:262
7.姜维:245
8.张飞:230
9.司马懿:228
10.吕布:201
11.周瑜:201
12.袁绍:200

同样是刘皇叔一骑绝尘,“智绝”“奸绝”“义绝”分列二到四名。

位于第二梯队的,就是孙权、赵云、张飞、司马懿、吕布、周瑜、袁绍、姜维、魏延等人。在不同算法下,这部分排名略有差异,《三国演义》中这些人的重要性仅次于四大主角没有任何疑问。


按章节分析的另一个发现是:定义“章节主角指数”后——

我们会惊讶地发现,排名前40的“章节大主角”中,没有任何一次是曹操。这也是《演义》以刘备集团为主视角的一个体现,当刘备集团不出镜时,作者采用的视角比较中立。


其实《三国演义》的时代划分比较明确,分段来看更一目了然。

如图,诸葛亮(橙色曲线)从出场之后就迅速走高,但是斜率一直没有超过刘备(最上方的蓝色曲线),直到白帝城后(蓝色曲线停止增长),诸葛亮才开始整本《演义》最惊人的“单男主表演”,其斜率之高,与关羽在曹营时(黄色曲线前期最猛烈的一段爬升)相仿佛,持续时间和总出场数又远远过之。

从图中可以看出,在关羽、曹操、刘备去世之前,诸葛亮的总出场次数并没有超过这三人,这三人去世后,诸葛亮才猛烈攀爬,最后远远超过了曹操和关羽,定格在全书第二,仍然低于他的主公刘备。但是他在南征和北伐章节的绝对主角身份,整部《演义》无人能出其右。

蓝色的刘备曲线,从《演义》第一回开始就持续保持着高斜率,直到生命的终点。可以这么说:只要刘备不死,他就一定是《演义》的第一男主角。刘备死之后,只要诸葛亮不死,诸葛亮就一定是《演义》的第一男主角。诸葛亮死之后呢?其实姜维的斜率对邓艾并没有显著优势:

如图,后三国时代的第一主角姜维,最后的总出场次数,与中三国时代的第一配角司马懿基本相等。他在属于自己的章节里的斜率,在邓艾登上舞台之后两人一直持平。如果说诸葛亮对司马懿有绝对优势,那姜维拿邓艾就是一个没办法。在曲线中明显地反映出了北伐的两种画风。

《演义》的主角中,刘备、曹操、关羽、张飞的谢幕宣告了黄金时代的结束,明星人物吕布、袁绍、周瑜此时也早已去世。孙权还在,但是他的戏份已经不多了,孙吴此后一直概念性地充当联合抗曹的一角。《演义》前期那以天下为棋盘的恢宏视角,从此变为单一主线。

传送门:如何评价三国志11的地图地理环境?

白帝城之后进入白银时代。诸葛亮是毫无疑问的第一主角,硕果仅存的赵云、魏延是他南征北伐的得力助手。其对手司马懿倚重的是另一位黄金时代的武将:在乌巢之夜投降曹操的张郃。

传送门:张郃在《三国演义》前半场处处被虐,怎么下半场就成了“名将”?

这些人都去世之后进入属于姜维的青铜时代,但作为主角的他与配角邓艾的存在感相当。刘备在的时候,读者心中的“桃园梦想”一直都在,诸葛亮是以一己之力逆天而动强行寻找希望,到青铜时代,作者和读者都已经清楚姜维已经没有可能成功了,我们更多的是尊敬他的坚持。

传送门:为什么感觉三国演义前半部比后半部精彩?

至于姜维死后的黑铁时代呢?既然《演义》的篇幅已经少得可怜了,我们也就不分析了。


最后说点有意思的吧——

如果不限于主角,有着最高“显眼程度”的是一个谁都想不到的人。不熟悉《演义》的读者,听到他的名字,可能都想不起是谁。他只在一回里出场,也在同一回里退场,凭借在这一回里的密集出镜,成为了“显眼程度”最高的人物(卖个关子,大家可以猜猜这个人是谁)。我们的孟大王和妖人于吉也是这种“在有限的空间里刷出自己的存在感”的代表,虽然来去匆匆昙花一现,但是江湖上已经留下了大神的传说。

与之相反的,则是“有一些出场次数,但显眼程度极低”的人物。其特点是读者或许知道有这么个人,但是这个人只作为人名出现,没有情感没有性格。这类人中只出场过一次的就不说了,说几个出场多次的:孙坚的弟弟孙静,蜀国的大臣樊建,黑山贼张燕,大家可以试着想想这些人在《演义》中做过什么。


彩蛋时间:


几个朋友们问得比较多的问题——

Q1: “显眼程度”是怎么算的?

A1: 在出场的章节里的平均出场次数。

Q2: 出场次数就是人名在书中出现的次数吗?

A2: 统计人名(曹操)是最基本的,在此基础上优化为还统计别称(魏王),再优化为还统计简称(前文有曹操时的“操”),再优化为还统计泛指类别称(某些章节中的“丞相”),再优化为去掉对话中提及之的情况,大约就是出场情况了。

Q3: 答主是统计学大佬吗?

A3: 不是,我对《演义》远远比对统计熟悉,可以看我的更多演义回答: 新浪三国有遗篇

Q4: 神秘人是谁啊?

A4: 评论区里有,自己找吧……

Q5: 谁的称谓出现得多,谁就是主角吗?

A5: 当然,你可以不这么认为。在直观的阅读感受层面,在白帝城之前的情节中,读者代入最多的也是刘备呀。关于刘关张和诸葛亮的互补性,我前几天写过一篇回答:《三国演义》里为什么诸葛亮晚年智谋退步那么多?


更多演义回答:祁达方的《三国演义》文集


user avatar   qiao-jia-xi-2 网友的相关建议: 
      

写段对话《第一男主》

刘禅:你好,我是刘禅。

我觉得,我是《三国演义》的第一男主角,就像孙悟空是《西游记》的第一男主角一样。

记者:胡说!你哪点和孙悟空一样了?

刘禅:孙悟空有菩提和唐僧两个师父,我有刘备和诸葛亮两个父亲。

记者:你这简直是牵强附会。

刘禅:还有,我觉得,第一男主角,刚出生就得有戏剧冲突。

比如孙悟空,《西游记》详细记述了他怎么从石头缝里蹦出来的;

比如哈利波特,小说详细记述了他是怎么被送到姨妈家的。

我刚出生,就有大大的戏剧冲突。

赵云救阿斗、刘备摔阿斗,这可是妇孺皆知的故事。

记者:你婴儿时期的那一段,倒是动静很大。

可是你长大后,是个不折不扣的庸才。

主角,应该是个能力超群的英雄好汉,而不是你这个“扶不起的刘阿斗”。

刘禅:谁说能力强,才能当主角了?

《红楼梦》里的第一男主角贾宝玉,能力很强吗?

你看看他的判词:“无故寻愁觅恨,有时似傻如狂;纵然生得好皮囊,腹内原来草莽。潦倒不通庶务,愚顽怕读文章;行为偏僻性乖张,那管世人诽谤!富贵不知乐业,贫穷难耐凄凉;可怜辜负好韶光,于国于家无望。天下无能第一,古今不肖无双;寄言纨绔与膏粱:莫效此儿形状!”

既然贾宝玉能当主角,那我也能当主角。

记者:我觉得你比不上贾宝玉,贾宝玉比你聪慧多了。

刘禅:但是贾宝玉落魄后,就“贫穷难耐凄凉”,心态不行啊!我的心态好,投降后照样“乐不思蜀”。

记者:贾宝玉是中心人物,并不是因为他无能。你不能因为“无能”这点和贾宝玉相似,就强行说自己也是男一。

刘禅:贾宝玉和红楼梦其他重要人物,都能扯上关系,他是中心人物。

你再看看我,我也是个中心人物。

我爹是刘备,我相父是诸葛亮,我继母是孙权的妹妹孙夫人,我叔叔是关羽、张飞,我投降了曹魏,我见证了晋朝成立。

我一直生活在历史漩涡中心,我和各派势力都能扯上关系。

我不是第一男主,谁是第一男主?

记者:刘备、诸葛亮,都比你像第一男主。

刘禅:可我比他们死得晚啊。他们都没见证季汉灭亡、晋朝建立,我见证了。

记者:他们还比你生得早呢。

刘禅:我生的很是时候。

我爹刘备,年近半百才建立功业,走到历史舞台上;

我相父诸葛这种青年才俊,都得快三十岁才出山。

我刚出生,就出生在了历史的舞台上。

记者:可是,你说说,你比得上哪个英雄豪杰?

刘禅:你懂什么?

现在不流行让有能力的人当主角了,流行让啥也不懂的傻白甜当主角。

很多玛丽苏剧,女主就啥也不会,只等着被其他人救助。

这不是和我一样吗?

我最著名的故事之一,就是被赵云救!

我这一生,先是被我爹罩着,后是被相父罩着,再后来被我爹和相父留下的人罩着,最后投降了,被司马家罩着。

我不是主角,谁是主角?

记者:那我明白了,你确实是第一主角。但你不是男主,你是女主。


user avatar   li-xiao-xue-97-55-50 网友的相关建议: 
      

日本人不懂反思,我就得用这种方法帮他们反思。




  

相关话题

  有个军人爸爸是种怎样的体验? 
  小说《射雕英雄传》里最喜欢的片段是什么? 
  韩国人有哪些令人恐惧或敬佩的细节? 
  为什么看《三国演义》的很多人认为刘备是个小人? 
  城市摩托车是否应该被取缔? 
  民国时期四大家族真的全都贪腐么? 
  成龙实际打起来有多能打?武打明星们都有真功夫吗? 
  研究生 30 岁读研是不是有点晚了? 
  我机电专业的应届生,可以说是零基础,想报个培训班学习ui转行到这方面来合适吗? 
  现在还想重温小时候读过的哪些书?为什么? 

前一个讨论
恕我直言,全网都没有一本靠谱的适合英语零基础自学的书,是零基础!!!音标都不会读的那种!!!?
下一个讨论
请问一个武术高手和普通人对打,武术高手不用器械的情况下能把普通人打死吗?





© 2024-11-08 - tinynew.org. All Rights Reserved.
© 2024-11-08 - tinynew.org. 保留所有权利