首页>鸿祥娱乐官网 > 鸿祥娱乐官网 > 《今生今世》词云生成与小说分析

《今生今世》词云生成与小说分析

【本文关键词】鸿祥娱乐官网,今生今世

  词云就是数据可视化的一种形式。给出一段文本的关键词,根据关键词的出现频率而生成的一幅图像,人们只要扫一眼就能够明白文章主旨。

  最近在知乎、以及各大媒体上经常可以看到这个词云,刚好前段之间读了胡兰成的《今生今世》,所以就尝试着自己通过python来实现图云。碰巧的是,今天刚好也是张爱玲的诞辰。下面是最终生成的结果。图一为全词的图生成,背景是张爱玲的肖像,图二图三分别是散文集中出现的人名和地名。

  下面主要来介绍一下词云生成的过程。顺便一提的是,现在也有很多在线的网站是可以直接生成词云的,只要把文字贴进去就可以了,例如图悦。但是,由于我选取的是二十世纪中期的作品,分析和提取关键词的过程有一定的复杂性,所以还是通过python来处理。

  matplotlib,不用多讲,用python学习过机器学习的人都知道,是一个绘图库,最终词云的绘制需要用到它。

  jieba,最好用的开源中文分词工具。他最主要的两个功能是分词和关键词的抽取。在词云的生成过程中都需要用到。

  wordcloud是一个词云生成器,只要进行相关的配置就能生成相应的词云。

  以上三个工具具体的使用方法,我会在参考文献中贴出来,这里就不花篇幅单独讲了,直接看《今生今世》的例子。

  散文中会存在例如我们、觉得、这样这一类的词,这类词的出现导致了,散文集中真正的关键词无法被提取出来。

  散文中会存在例如汪先生,而jieba分词,将其分成汪先生和先生两个词,从而导致先生的频率远大于汪先生,从而对结果产生影响。

  正是由于中文的复杂性,所以对关键词的提取带来了难度,好在jieba基本能够将上述问题解决。那么下面就是代码实现的过程了。

  jieba有内置词库,一些常见的人名地名,他是能够自己分辨出来了的。一些比较生僻的词可以通过自定义词库来添加进去,保证识别率。词典格式和dict.txt一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。例如,

  我们、觉得、这样这一类词语叫做停顿词,需要先处理。我们可以先去网上下载各大机构的停用词词库,然后应用到散文集中,由于停用词词库大多使用的是现在的文法,而《今生今世》创作时间比较早,有些可能还需要人为添加停顿词。

  经过以上两步的操作,就生成了一个新的文档,去除了停顿词。接下来就是提取关键词的时候了。

  jieba.analyse.extract_tags()方法就是用来提取关键词的,参数依次为(文本,抽取关键词的数量,返回结果是否带权重,提取关键词的词性)。由于词云是需要根据权重来生成的因此withWeight为true。得到结果如下,对TF-IDF算法有了解的,应该知道这里的权重就是tf-idf。

  allowPOS=allow_pos可以提取指定词性的关键词,nr为人物名词,ns为地点名词。这样就可以生成散文集的人名词云和地点词云了。

  这里需要注意的,WordCloud默认生成的词云为矩形的,如果需要自定义词云的形状,需要提供一张二值化的图片,生成的词会填充图的黑色部分。

  wordcloud对中文的支持不太好,需要自己设置字体,自己文件在项目中。ttf的字体可以去系统中提取。

  显然,爱玲是词云中最大的一个词,这就提现了,胡兰成是爱张爱玲的吗?或许也不见得吧,毕竟胡兰成总共有8个老婆,张只是其中之一。

  人物,词云上基本已经可以很好的体现。最大的无疑是他的爱人和他的上司。其中贯穿了两条主线——政治和爱情。政治线上。汪精卫、李士群、周佛海提到的最多,都是大汉奸;爱情线个在词云上,玉凤、爱玲、秀美、一枝、爱珍、小周。

  环境,这里就弱化成地名吧。最大的是胡村,他的出生地;日本,他了结余生的地方。当然也能梳理出一条他作为汉奸最后逃亡的路线。胡村---杭州---诸暨---温州---香港---台湾---日本