本文通过pthon和Excel简单分析人物之间的关系
首先介绍一下这部小说,小说作者猫腻
陈长生在故事中,先是认识和体会到了自身命运和生命的时限。从这个方面出发,他是属于认识自然、了解自然、认识规律、了解规律的过程。
陈长生认识与体会的过程,便属于主观能动力中想的范畴。正因为有了这种认识和想法,他的心中才具备了自己的主观意识。
因此,陈长生有了改变自身命运的想法。他不希望自己的生命就此终结,而是希望选择和思考改变的方法。
于是,陈长生开始付出自己的行动。逆天改命,也成为了他人生中重要的行动和实践。他开始寻找改命的方法并做出行动。
这个逆天改命的行动,便构成了主观能动力的实践部分。那,便是做与行动,是属于改造世界。
可是,在他逆天改命的路上困难重重、险阻重生。面对这些坎坷和阻碍,陈长生开始了自己的改命之路。
而这段道路上,他不折不挠、坚强不屈的意志精神,便构成了主观能动力的精神状态。可以说,正是这份精神状态,让陈长生坚持把那条改命之路走下去。
认识自身命运、做出行动改造命运,并且从中体现出坚强不屈、百折不挠的精神状态,整体上发挥了陈长生的主观能动力。
《择天记》给予我们的人生启迪,或者便是这份融合着陈长生认识命运、改造命运和坚强不屈的主观能动力。也许,这也是我们面对人生困难与挫折时所应该发挥的哲思了。这,也是一份满满的青春正能量。
楼主因为看过择天记,所以拿择天记来做分析也是非常高兴。
好了废话不多说
开始
环境:python3
模块:jieba
材料:择天记.txt,择天记人物.txt
择天记可以自己到网上下载,
以下是主要人物
1.定义数据结构
names = {}#字典类型
relationships = {}#字典类型
linenames = []#列表类型
all_names = []#列表类型
names用于存入小说人物和出场次数;relationships保存人物关系的有向边,该字典的键为有向边的起点,值为一个字典edge,edge的键是有向边的终点,值是有向边的权值,代表两个人物之间联系的紧密程度;linenames存入每行小说出现的人物;all_names是小说所有人物。
2.把人物名导入jieba库
导入的目的是对小说出现的人名进行统计。
#添加人名到jieba词库中
f1 = open('/Users/tencenting/PycharmProjects/qm/venv/zetianji/names.txt',encoding='utf-8')
for line in f1.readlines():
all_names.append(line.strip().strip('\ufeff'))
for name in all_names:
jieba.add_word(name)
以上都是固定语法。把路径改了就行。可参考jieba库的用法
3.统计小说人物关系出场次数
#统计小说人物出场人数模块
f2 =open('/Users/tencenting/PycharmProjects/qm/venv/zetianji/zetianji.txt',encoding='utf-8')
forlineinf2.readlines():
seg_list = jieba.cut(line)
linenames.append([])
foriinseg_list:
ifiinall_names:
linenames[-1].append(i)
ifnames.get(i)is None:
names[i] =0
relationships[i] = {}
names[i] +=1
4.保存数据写到本地
#人物关系及写入文件模块
forlineinlinenames:
forname1inline:
forname2inline:
ifname1 == name2:
continue
ifrelationships[name1].get(name2)is None:
relationships[name1][name2] =1
else:
relationships[name1][name2] +=1
importcodecs
withcodecs.open('/Users/tencenting/PycharmProjects/qm/venv/zetianji/tian_node.txt','w','utf-8')asf:
f.write("Id Label Weight\r\n")
forname, timesinnames.items():
f.write(name +' '+ name +' '+str(times) +'\r\n')
withcodecs.open('tian_edge.txt','w',"utf-8")asf:
f.write("Source Target Weight\r\n")
forname, edgesinrelationships.items():
forv, winedges.items():
ifw >3:
f.write(name +' '+ v +" "+str(w) +"\r\n")
5.数据可视化
步骤4.的结果
导入Excel可视化数据得:
以上结果Excel得出。不过还是推荐使用gephi来可视化
可视化结论:主角陈长生和徐有容在小说的出场次数是最多的4%,其次是陈长生和唐三十六3%(取平均值)