python文本聚类 词云图_数据思维实践 | TASK 12 文本分析

原标题:数据思维实践 | TASK 12 文本分析

文本分析可以干什么

生活中文本无处不在,网页上的新闻、证券分析师的研究报告、政府工作报告等等,这些都是文本。如何从文本中挖掘价值是文本分析需要回答的问题。对于生产厂家来说,可以从用户评论中挖掘消费者对产品的关注点,从而帮助改善产品的设计。在金融行业,可以从上市公司的公告、年报、新闻中探究公司的发展状况;从网民在股吧、论坛上的动态来判断大众对股票的评价和喜好程度。在互联网行业,谷歌曾经做过一个流感预测,通过监测“温度计”、“肌肉疼痛”等一系列和流感相关的关键词在网上的搜索量来追踪分析不同地区的流感趋势,比传统方法快两周。在文学领域,还可以通过对文学作品进行分析来获得一些写作线索,比如关于红楼梦的前八十回和后四十回的作者问题。

举了这么多例子,不禁要问文本分析主要包括哪些内容?如何进行文本分析?有哪些常用的技巧?TASK 12的目的就是帮助读者进行文本分析的入门。

文本分析的主要内容

文本分析是一种把非结构化数据转化成结构化数据的方法,通常包含以下几方面的内容。首先要对文档进行中文分词,在分词的基础上可以进行字、词、句的统计,对文档有一个初步的认识。接下来可以进行一些关键词的提取,帮助提炼文档的内容,达到简化、概括文档的目的。提取关键词方法有很多,最简单的就是词频的统计,选取出现次数最多的词根作为关键词。

图3-18 文本分析的内容

此外,还可以对词语进行情感分析,即判断词性是积极的还是消极的,这在用户评论分析中比较常见,常常会据此来判断用户对产品的喜好程度。还可以进行聚类分析和其他模型的研究。下面举一个简单的关于分词的例子:可以看到左边是一段文字叙述,首先通过分词技术可以把这段文本分成右边的单词,进而对单词进行字数、句数以及关键词的统计。

图3-19 一个关于分词的示例

文本分析基本流程

在进行文本分析之前,首先熟悉一些常用的字符处理函数(以R语言为例)。这些函数可以辅助进行诸如字符提取、字符拼接、字句统计等基本应用,下面以简单的示例进行介绍。

1

简单的字句统计

针对简单的字句统计,常用的字符处理函数有以下几个:nchar、strsplit、paste、paste0、grep、gsub、substr等函数。具体地,nchar这个函数是用来统计字符个数。下述示例可以看到对于中文字符,一个中文字符计数为1,所以统计“我和你”结果就是3。但是对于英文字符,是一个字母计数为1,且空格也作为计数。strsplit是字符分切函数,比如下例就由参数split指定以逗号为分切标志。paste为字符粘贴函数,其他函数请读者自行试验,探索其实现的功能。

2

中文分词

在英文中,单词和单词之间是以空格作为自然分界符的,每一个单词都可以表示一个较为完整的语义。但是中文不同。中文以汉字作为基本单位,只有句和段能通过明显的分界符来简单划分,而“词”却没有形式上的分界符。因此,在对中文文本进行分析时,首先需要进行分词。

在R语言中,有两种较为常用的分词包。第一种是Rwordseg。这种分词方法使用 rJava 调用了Java 分词工具 Ansj。Ansj 是一个开源的中文分词工具,基于中科院的 ICTCLAS中文分词算法,是学术界著名的分词算法之一。第二种是jiebaR,是jieba分词算法在R中的实现。jieba是基于python写成的一个工业界的分词开源库,具有很好的扩展性。Rwordseg在分词之前会去掉文本中所有的标点符号,这就会造成原本分开的两个句子前后相连,因此前一句的最后一个字就可能会和后一句的第一个字连在一起变为一个词;而jiebaR在分词时不会去掉任何标点符号,而且返回的结果里面也会有标点符号。因此,在较小的文本数据集上,jiebaR的分词效果会相对较好。下面将详细介绍如何使用jiebaR进行中文分词。

在使用jiebaR包进行分词时,首先需要在R中安装并加载jiebaR分词包,然后通过worker函数来初始化分词器。worker函数包括很多参数,用户可以在里面指定使用的分词模式、是否加载自定义词典或者停用词词典,以及返回分词结果的同时是否标注词性。用户可以通过“?worker”来查看该函数的帮助文档。图3-20展示了使用jiebaR进行分词的结果,它将“东西不错,很好用”这句话分为了五个词:“东西”“不错”“很”“好”“用”。

图3-20 jiebaR中文分词示例

3

优化词典

在上面的例子中,jiebaR将“东西不错,很好用”这句话被分为了“东西”“不错”“很”“好”“用”五个词。可能很多读者对这个分词结果都不太满意,因为“好用”应该是一个词,而不应该被分为两个独立的词,而且“很”这个副词只是表达了强度,而没有实际的含义。那怎么才能得到较为满意的分词结果呢?这就需要对jiebaR的词典进行优化。优化词典大致分为两种,一种是去掉停用词,一种是添加用户自定义词典。下面将对两种方式进行具体说明。

>>>去掉停用词

停用词大致可以分为两类:一类是语言中使用的功能词,如语气助词、副词、介词、连接词等,这些功能词通常极其普遍,但并没有什么实际含义,比如:“你、我、他、了、的”之类的。另一类是有特定含义,但是应用十分广泛的词,比如“想、做、来、去”等。

目前业界以及学界对停用词的范围没有给出统一的划分标准,但很多机构都给出了自己的停用词表,如百度,哈尔滨工业大学,四川大学机器自然实验室等,读者可以参考这些机构发布的停用词表。jieba分词算法中也有自带的停用词库。值得注意的是,很多时候对于停用词的设置需要根据研究文本的特点来设定。例如,在分析手机评论的文本数据时,大部分评论中都会出现“手机”这个词,但这个词对于挖掘评论中影响手机好评率的关注点并没有帮助,所以可以把“手机”这个高频词作为停用词去掉。

>>>添加自定义词典

绝大多数的分词方法都是基于“字典”,只有字典里有的词,才可能在分词的时候分出来。比如上面的“好用”之所以没有被分出来,就是因为词典中只有“好”“用”这两个字,而没有“好用”这个词。这就带来一个问题,对于一些专业词汇或者新词,字典里没有怎么办?这时就要通过添加自定义词典来丰富原始字典。那么如何选取自定义词典呢?有几种途径供大家参考。首先是从原始分词结果中总结,这样虽然费时费力,但效果却是比较好的。其次就是有自己领域的行业词汇。第三就是可以从搜狗细胞词库中下载,通过一些转化就可以应用。

4

词性标注

分词之后,我们还可以对词性进行标注,这在jiebaR里是可以轻松实现的。比如图3-21展示的例子就可以告诉我们分出的词具体属于哪个词性。jiebaR将所有可能出现的词性划分为22大类,每个大类下又进行了二级和三级划分。常见的词性主要有名词、动词、形容词、代词、副词等。使用jiebaR进行词性标注之后,可以指导我们进行更复杂的分析,比如对分词结果按词性进行筛选等等。

图3-21 词性标注示意图

5

关键词提取

关键词的提取有很多方法,其中最简单的就是按照在全部文本中出现的词频大小。出现的次数越多,说明越重要。还可以使用TF-IDF(词频-逆向文件频率)指标来进行计算。其中,TF(Term Frequency)指的是某一个给定的词语在该文件中出现的次数。IDF(inverse document frequency)是对一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。图3-22通过一个具体的示例展示了什么是TF-IDF。

图3-22 TF-IDF计算示例

6

绘制词云

词云是一种非常简洁美观的可视化展示方式,通过词云可以一目了然的知道在一段文本中哪些词出现的次数最多。词云的展示方式可以通过多种途径实现,比如通过R包RColorBrewer和wordcloud(第一个R包可以提供颜色方案,第二个R包用来绘制词云图),可以得到图3-23(a)的词云图。另外,现在也有很多专门绘制词云图的网站,比如tagxedo(http://www.tagxedo.com/app.html),用它可以画出很多精美的词云图(如图3-23中右图所示)。

图3-23 词云图示例(左图为使用R包绘制,右图为在网站tagxedo绘制)

文本分析示例

谁是主角?——轻小说《Fate/Zero》文本分析

南京大学 边逸群

一、背景介绍

轻小说(Light novel),又名“奇幻小说”、“少年小说”、“青年小说”。可简单地解释为“可轻松阅读的小说”,与网络文学关系密切。读者群主要为青少年、中学生等年轻读者。文体多使用惯常口语,运用特定的故事描绘手法,以其多样的风格、变幻的场景、大胆的设定如动漫般迤逦,辞藻华丽,行文不拘一格,语言表达带有魔幻与神奇色彩等特点吸引读者。作者并不是向青少年诉说一个故事,而是往往和读者用相同观点描述有趣的事情。

轻小说由于其强烈的动漫风格,强的故事节奏感且多为阶段性完结的分卷故事,改编成本低,易于把控质量,因此经常改编成漫画动画和游戏。例如千万级别销量的作品《刀剑神域》等。在漫画,动画,游戏以及周边衍生方面创造了大量的财富。

图3-24 轻小说典型作品

《Fate/Zero》是一部比较成功的轻小说。根据此小说改编的同名电视动画,豆瓣评分高达9.0分,在各大视频网站均已有几千万的播放量。同时,还有与之相关的漫画以及游戏,已成功地形成系列文化。小说共52万字,11712个自然段,原版分为《第四次圣杯战争秘话》、《王者的盛宴》、《逝去的人们》、《炼狱之炎》四章。小说描述的是第五次圣杯战争(《Fate/stay night》的主要内容)10年之前的第四次圣杯战争。圣杯是传说中能够实现拥有者愿望的宝物,每隔60年在冬木市出现一次,然后选出7位魔术师作为御主(Master)与7位英灵作为从者(Servant)订立契约,从而展开圣杯战争,最终获胜的一组可以用圣杯来实现任何愿望。所谓的英灵是历史或传说中赫赫有名的英雄的灵魂,他们通过仪式被召唤到现世。小说最终的结局也解释了标题,从零开始,又回归于零。

文中仅御主与相应的从者就有14人,性格志趣各不相同。此外还有与御主相关的亲属,与御主形成一个阵营,乍看令人眼花缭乱。“在眼花缭乱地踏进Fate的故事世界的时候,假如本书能够担当起领航人的职务,我作为著者将为此感到不胜幸福。”2011年1月作者在谈及创作灵感时说道。即便如此,头一次接触这部小说的读者可能阅读过半,但对主角是谁仍然没有头绪。同时,这一问题在社区中形成了激烈的讨论。

为此我们用文本分析的方法,观察人物的特点并且分析小说中人物关系,进而对谁是主角做简单的判断。

二、文本分析

小说结构紧凑,剧情快速冲突。涉及了7个阵营间、共计八场战斗。其中前三场为牵扯多个阵营之间的混战。而后五场为从者或者御主之间一对一的决战。

图3-25 《Fate/Zero》时间线

主角是文学作品的主要人物,即作者所着力刻画的一个或几个在作品中占据主导地位的中心人物。作品的矛盾冲突和故事情节紧紧围绕主人公展开,其他次要人物的出现及其活动,也以主角及其活动为中心,并对主角起一定的映衬作用。

所以判断小说主角主要借助两步:抓住描写刻画谁、借宾衬托凸显谁。

(1)抓住描写刻画谁:作为一篇小说的主人公必定是作者倾力刻画的艺术形象,作者定然会不惜笔墨,而且还会抓住某个局部从不同的角度,多方面地去描绘、刻画,从而达到主要人物有鲜明的个性特征。首先我们对比各阵营出场次数(如图3-26)。Berserker与Caster阵营的描写较少,从而他们不是主角。而Assassin阵营中,Assassin描写较少,但其御主绮礼的描写段落较多。

图3-26 各阵营出场次数分组柱状图

对于剩余的五个阵营,我们看对应的出场密度(如图3-27)。虽然Lancer阵营在三次混战时,出场密度远高于其他阵营,但他们死于第三次混战,没有贯穿整个故事。而其他阵营总体的出场密度大致相当。

图3-27 出场密度

其次,选择典型的人物结合词云进行分析。

图3-28 人物词云图

Saber是出场最多的人物,通过词云可以看出,她身为亚瑟王,战斗能力较强,能与男人相匹敌,从而渴求胜利。从图中比较大的动词,如“点头”、“看着”等,可以看出与她相关的对话较多。从小说的情节中求证,她在三王狂宴上意志动摇,所以更多的是听从别人的讲述。虽然出场多,但更倾向于配角。

接下来看Saber的御主卫宫切嗣。他作为魔术师参战,反而更钟爱用手枪子弹这种非魔术的方法消灭魔术师。从“敌人”、“时间”、“目标”这几个词中,可以看出卫宫切嗣对战术的掌控更多。并且他的确喜爱暗中行动,搜集情报,性格复杂,更倾向于主角。

出场次数第三多的言峰绮礼生于宗教家庭,受到其父亲的影响大。有“离开”、“愤怒”,也有“明白”、“期待”,展现了他的两个面。从故事里求证,是因为他少时情感压抑,找不到自己的欲望。在圣杯战争中遇到Archer后,找到了方向。凸显了他的转变,描写同样充实。

(2)借宾衬托凸显谁:单独从人物入手有时只是表层的,我们还需关注小说中人物之间的关系。

图3-29 《Fate/Zero》社交关系图

此图展示了小说主要人物之间的互动关系。可以看出,由英文名表示的从者在整个关系的互动中,处于更核心的位置。其中,Rider与Saber处在更中心的位置。所以接下来,单独看Rider的社交关系。

图3-30 Rider人物关系

Rider与其御主韦伯互动非常多,俨然是一对好搭档。其次与Saber和Archer的互动也较多,对应于三王狂宴的剧情,用Saber王道的变化展现出Archer王道的吸引力。并且他与其余御主均有互动,表现十分活跃。

三、总结

综上所述,这部描写圣杯战争的小说,人物众多、各有特色。每个人都有自己的理想,每个人都有自己的战略。Saber出场次数最多,但人物塑造较为单一。卫宫切嗣与言峰绮礼性格有差距,但表现不相上下。而Rider社交同样复杂,与其他从者均有互动。不同人物的故事相互交错,剧情丰富。几乎没有明确的主角位置。更倾向于群像小说。

课后作业

找到作业数据“琅琊榜”,并完成以下五个任务:

将文本读入并将数据集命名为langya,展示数据集的前10行。提示:处理中文时最常见的错误就是乱码问题,这往往是是由于编码造成的,通常可以通过设置UTF-8编码来解决。

进行初步的分词尝试,提示:本任务有三个关键点,如何进行逐行分词?如何添加自定义词典?如何去掉停用词?

进行词频统计,要求:只对字符数大于等于2的词根进行统计,将结果按照降序排列。存成数据集命名为freq,其中第一列为词根,第二列为频数,展示数据集的前6项。

统计主要人物在全书的出场频次并绘制柱形图。提示:这里需要注意的是对于某一个人物可能要统计他不同称谓, 例如梅长苏就有好几种叫法,比如苏哲、小殊、林殊等等说法。

统计作者在描写梅长苏时经常用的动词有哪些,并对这些常用动词绘制词云。

提示:如果不是非常了解琅琊榜,你可以看一下这部豆瓣评分9.1的电视剧。当然,你可以用其他你熟悉的文本数据,来完成这个课后作业。

责任编辑:

你可能感兴趣的:(python文本聚类,词云图)