Python文本处理:《三国演义》词云的构建与分析

  • Python初学者,目前为止初步学完了基础语法和常用库的操作。
  • “《三国演义》词云”是近期归纳学习心得期间一时兴起做来练手的,水平极其有限,仅作记录。
  • 自学Python强推北京理工大学嵩天教授的MOOC:Python语言程序设计;课件的深度设置地很舒服,非常适合零基础入门或者有数据分析需求但是无意深挖技术的听众。
  • 以上为背景

1. 语料与外部库:

三国演义全文txt格式语料:Python123.io

Jieba分词:Github

WordCloud库:Github

2. 代码:

import jieba
import  wordcloud as wc
#三国演义.txt

#文本读取
f1=open('datalib/threekingdoms.txt','r',encoding='utf-8')
t1=f1.read()
f1.close()

#文本预处理(同义词合并)
t1=t1.replace('孔明曰','孔明')
t1=t1.replace('玄德曰','玄德')
t1=t1.replace('玄德','刘备')
t1=t1.replace('关公','云长')
t1=t1.replace('云长','关羽')


#结巴分词+去除虚词
ls=jieba.lcut(t1)
excludes={'不可','却说','二人','不能','次日','左右','主公','于是',
          '今日','天下','大喜','将军','引兵','商议','陛下','都督',
          '不敢','如何','如此','众将','只见','后主','此人','不知',
          '人马','先主','一人','丞相'}
for word in ls:
    if word in excludes:
        ls.remove(word)
txt1=" ".join(ls)

#词云生成
w1=wc.WordCloud(width=1000,height=700,background_color='white',\
                max_words=20,font_path='msyh.ttc')
w1.generate(txt1)
w1.to_file("datalib/3KingWordCloud.png")

4. 词云生成

Python文本处理:《三国演义》词云的构建与分析_第1张图片

5. 分析

5.1 从词云看《三国演义》的角色排位

  • A级主角:刘备;关羽;孔明;曹操

词云中硕大的“刘备”二字昭示了皇叔在《演义》中的超然地位,“崇刘抑曹”的主线显露无疑。

“诸葛亮”、“关羽”在字号上略逊于“刘备”,正是读者印象中蜀汉的文武双臂无疑(张飞:那我呢.jpg)

曹孟德身为集权谋、霸略、豪气于一身的“可爱又迷人的反派角色”,虽然在小说中被刻意压制,但是仍能挤进第一梯队的行列,已足见其魅力。(孙权:好嘛,我没了)

  • B级主角:张飞、吕布、赵云

从字号不难看出,B级主角的出场频率相比A级的三位显而易见的少。

张飞作为“刘关张”组合的一员却被挤出第一梯队,实惨了。

吕布作为前期的明星角色虽然早早便当,但是仍然跻身B级主角行列,其刻画之细致可见一斑。

赵云身为三国衍生品的看板角色,论及出场频次却在B级梯队吊了车尾,不过想来小说后半似乎确实鲜见子龙身影...

  •  C级主角:孙权、周瑜、袁绍、司马懿、魏延、马超

刚才吐槽了张飞被挤出“刘关张”组合,而身为三国鼎立“一代目”的孙权却只能在C级梯队中做个“鸡头”,确实是迫真实惨;不过也暗合了其“孙仲谋”“孙十万”并存的杂糅历史形象。

周瑜、司马懿身为诸葛亮前后期对线的主要角色,也都得以跻身主角行列(孔明,YYDS)

袁绍、马超、魏延现身于词云起初我还比较意外,后来想想,原来这哥仨原来分别是前中后期推动剧情演进的引子?(存疑)

5.2 从词云看《三国演义》的地理名词

  • 词云中出现的地名包括荆州、东吴、汉中
  • 荆州作为小说前中期的争夺焦点,诞生了无数耳熟能详的典故。在词云中位列C位毫不意外
  • 东吴作为唯一的国名,能够力压魏蜀现身词云,一方面可以理解为东吴搞的是团队战术,玩的是集体主义,相比之下魏蜀则是刻画个人英雄主义为底色了。另一方面,发生与东吴主场之上的赤壁之战对于小说的情节发展堪称承上启下,自兹而后,形势由乱转定,从群雄逐鹿走向三国鼎立的博弈之中。有此一节则东吴现身词云也可谓合理。
  • 汉中在词云中现身属于意料之外之事,想来是因为其是后期诸葛亮北伐的必经之地。将汉中与荆州、东吴作比,偶然发现前两个地点都有对应的电源作品(eg.荆州:《影》;东吴:《赤壁》),倒是汉中在电影中鲜有现身,在此可以期待一下。

5.3 从词云看《三国演义》的战争

在词云生成参数中将阈值设定为词频前20,上文已经侃过了16个,剩余4个词分别是:蜀兵、魏兵、军士、军马,不难看出可以分别构成两对词组。

蜀兵vs魏兵:《三国演义》的知名战役无数,然而出场频率最高的缺失魏兵与蜀兵。回顾这两个词频繁现身的章节,应当是诸葛亮北伐期间。倒也是暗合了后期魏蜀争雄的纵贯线。

军士vs军马:前者的字号远远大于后者,可见小说中塑造的能臣武将们虽个个横刀跃马,然而大头兵之间的拼杀才真实左右战局的基线。

你可能感兴趣的:(nlp,自然语言处理,python)