前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我叫你一声,你敢答应吗?

我叫你一声,你敢答应吗?

作者头像
HuangWeiAI
发布2019-09-30 15:44:26
8260
发布2019-09-30 15:44:26
举报
文章被收录于专栏:浊酒清味浊酒清味

西游记著名桥段“我叫你一声你敢答应吗?”想必大家都有非常深刻的印象,甚至还会浮出这个画面:

不对,是这个图:

但是,大家还记得,孙悟空回答了什么名字被葫芦吸了进去了吗?孙悟空被叫的最多的名字是悟空还是大圣?带着这些问题,我们用科学的方法对西游记进行分词分析,竟然获得了出人意料的结果。

分词工具

我们知道,中文分词指的是将一个汉字序列切分成一个一个单独的词。之前,在红楼梦文本分析的时候用过一个非常著名的分词工具:jieba分词。

jieba 是一个python实现的中文分词组件,在中文分词界非常出名,支持简、繁体中文,高级用户还可以加入自定义词典以提高分词的准确率。

jieba分词是一种基于统计语言模型分词的:

摘自 吴军《数学之美》

从图中可以看出来,jieba分词是一种基于词典的统计分词方法,而这里的词典是来源主要有两个,一个是网上能下载到的1998人民日报的切分语料还有一个msr的切分语料。另一个是我自己收集的一些txt小说,用ictclas把他们切分(可能有一定误差)。然后用python脚本统计词频。总结起来就是基于现代语料而获得的词典。

但是,西游记作为一个传统小说,文风为半白半文,词典的加入在理论上可能影响分词的准确率。但是jieba对于词典中没有的词使用了采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。用简单的话就是说jieba分词也考虑到了词典中没有出现的词。

为了严谨起见,我们在jieba分词之外再使用另外一种无词典的分词方法。这个方法在分析红楼梦的时候用到过。这个方法的主要基于信息熵的无字典分词算法。简单来说,就是不借助其他文本,从西游记小说本身入手,通过统计方法猜出来西游记文本哪些是词的可能性。

所以这里的无词典的意思不是说不用词典,而是词典是来自于文本本身。当基于文本本身的词典建立好了之后,我们再采用Viterbi算法去解基于汉字成词能力的HMM模型最终获得分词结果。

在最终结果出来之前,我们不对上面两个方法的好坏做出判断。

分词结果

我们先展示jieba分词中出现频率最高的十大词:

出乎意料的是,前十名竟然没有“悟空”,反而给八戒,三藏,还有沙僧这几位足够的牌面。还有第一名的“行者”又是什么呢?我们不禁要问是不是分词结果出错了呢?

我们进一步给出分词词云图,这张图我们选取前五十名:

我们发现了悟空,大圣这些词,但是出现频率相对较低。

为了验证jieba分词的准确性,我们再给出无词典分词结果:

从结果可以看出来,这里分词并没有把“xx道”分好。不过也能看出来,西游记在描写某个人物的时候,有大约一半的场景是这位人物在说话。其中“三藏道”甚至超过了第13名的“三藏”,难道这就是大话西游里面唐僧很爱说话的验证?

我们将“xx道”和“xx”合并一下,重新画出频率统计图:

对比jieba分词结果,发现差距没有那么大,行者依然排名第一,其他人物的排名有细微差别。

总结下来,jieba分词的结果可信度比较高。

文本分析

基于分词工具给出来结果是“行者”出现的次数远远高于我们习惯中的“悟空”,这是怎么回事呢?要想回答这个问题,我们必须回到文本当中。

将手中宝珠净瓶往海心里扑的一掼,唬得那行者毛骨竦然。

行者仔细看那驮瓶的怪物,怎生模样:根源出处号帮泥

行者见了,暗笑道:“原来是看瓶的,想是不见瓶,就问他要

行者即忙敛袖,将左手伸出。菩萨拔杨柳枝,蘸甘露

行者合掌道:“是弟子不知。”

行者不敢推辞,舍命往上跳。

我们随机摘取了包含行者的几个片段。不难发现,西游记作为一个第三人称视角的小说,在描述孙悟空的时候,用的是“行者”,而不是“悟空”。

我们再摘抄有悟空的片段:

菩萨道:“悟空休言语,跟我来也。”

唐三藏心中害怕,兜住马不能前进,急回头道:悟空,是那里这等响振?

三藏勒马道:“悟空,你怎么来打听个响声

玉帝闻奏:“着孙悟空挑选几员天将,下界擒魔去也。”

魔王大怒道:“你想是孙悟空请来的。我就是那圣僧的魔头哩

那行者正然点看山景,忽听得有人叫道:“孙悟空,从那里来?往何处去?

可以看出来,在对话里面,悟空出现了很多次。因此我们发现西游记的影视作品当中,大家都用“悟空”这个名字是有道理的。而“行者”是出于第三人称的描写视角而导致了出现次数非常之多。

参考资料

jieba分词原理介绍:

https://www.cnblogs.com/echo-cheng/p/7967221.html

jieba分词字典来源:

https://github.com/fxsjy/jieba/issues/7

无词典分词代码:

https://github.com/LouYu2015/analysis_on_the_story_of_a_stone

无词典分词原理:

https://www.cnblogs.com/bigdatafly/p/5014597.html

无词典分词原理:

https://zhuanlan.zhihu.com/p/29209681

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与机器学习之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档