云太真
对中文文本进行词频分析,进而生成词云,是一种常见的文本分析方法。词云分析有助于快速掌握文章主要内容,抓住重点,深入理解文章内涵,并以图形化的方式进行展示。本文以国家发展改革委和国家能源局今年5月发布的《关于促进新时代新能源高质量发展的实施方案》一文为例,使用Python语言及其扩展包,对其进行词频分析,生成词云。
首先是整理文件,从网上可以找到此文件的文本,复制整理为TXT格式,去掉无关内容,去掉注解和说明。我们分析的是文本正文,对其他内容不做研究。
接着,我们利用Python语言的文件操作,将文件读入到字符串中,如下:
article=open(‘E:/关于促进新时代新能源高质量发展的实施方案.txt).read()
这条语句在执行的时候会报告错误。经查,发现最近Windows10操作系统下的记事本程序进行了更新。使用记事本程序保存TXT文本的时候,它会默认保存为utf-8编码格式。这说明微软不再把ANSI编码作为默认的编码格式。因此代码在打开文件的时候,需要指定编码格式如下:
该语句执行后,article是一个包含文件所有内容的字符串。
接下来,我们需要将这个连续的文本分割为词汇,这样才能进行词频分析。需要说明的是,汉语词汇的分割是一个难题。首先来说,汉语的基本单位是字,字组成词,词和词之间没有明显的标识。这一点不像英文文本,英语文本的词是基本单位,词和词之间有空格分开,汉语文本的词之间是连续的。其次,汉语的词和词也能组成词、成语、歇后语等,这些语言现象的存在对词汇的分割产生了很多困难。另外,不同学科的文本中往往还存在一些专业词汇和术语,进行词汇分割和识别需要对这些专业词汇和术语进行处理。
为解决中文分词的问题,不少研究者提出了一些有用的算法。在Python语言领域,有些研究者或机构发布了对应的扩展包给大家使用,有些适用于通用的社会科学文本,有些适用于某些专业领域的文本。这里我们使用最常用的结巴分词扩展包,使用之前我们要先安装。具体方法是:在联网情况下,在操作系统的命令行下运行指令:
pip install jieba
然后在程序中首先导入jieba分词包,即:
import jieba
接下来,我们这样使用jieba分词包。这条语句,将把文本字符串article分割为若干词汇,并按顺序,将词汇作为列表的元素返回,article_words是一个列表。你可以试试观察一下该列表的内容。
article_words=jieba.lcut(article)
分词的目的是对文本中的词汇进行频度统计,这可以使用Python的字典类型,该字典的键就是文本中的词,值就是该词出现的频度。针对前面的分词列表,进行如下循环:如果是新词,加入字典,频度设置为1;如果字典中已经有了,就将频度加1。代码如图:
我们接下来需要处理虚词和标点符号问题。所谓虚词,就是一些语气词和语法助词,例如“啊”“的”“得”“地”等,这些虚词和标点符号的出现频度很高,但在语义分析中没有意义,一般来说需要除去。除去这些内容的主要办法是使用停词文件和停词列表。
停词文件是一个事先准备好的TXT文本文件,里面是一些常见的语气词、助词和各种标点符号,每个词一行。停词文件可以从网上找到,是别人整理好的,自己在使用中也可以根据经验加入自己的“停词”,也就是需要过滤掉的词。程序读取停词文件,存放在停词列表中。具体代码如下:
stop_words=open(‘stop.txt,encodi
ng=“utf-8”).read().splitlines()
这里的splitlines()函数可以把读取到的文件按行存储到列表中,每行是一个元素。
接下来,我们使用停词列表,把前面列表中的停词删除。
另外,中文文本中,一些出现频度比较低的词可能也没有太大意义,也可以酌情去掉:
代码这样写的主要原因是字典不能在循环的时候删除元素。注意具体出现频度多低的词可以去掉,需要根据文本长度和词的数量来斟酌,也可以先生成词云图观察后再做调整。
词云图的生成通常调用第三方库wordcloud。这个库在使用之前也需要安装。具体方法是在操作系统的命令行下输入如下指令:
pip install wordcloud
然后在程序中先导入wordcloud再使用,即:
import wordcloud
然后,利用模块中的Wordcloud()方法生成实例化对象,该方法的常用参数如下:background_color表示颜色,默认为黑色;width和height表示生成的词云图的宽和高,单位是像素;font_path表示字体文件的路径;max_font_size表示最大字号;max_words表示最多容纳的词汇。这些参数都有默认值,不是必需的,但对中文词云分析来说,font_path参数是必须设置的,否则无法显示汉字。这里我们进行如下设置:
接下来,需要把前面处理好的词频字典对象交给词云对象:
w.generate_from_frequencies(words_freq)
最后,词云对象就可以导出生成词云图了,这是一个.png格式的图片文件,需要指定路径和文件名。
w.to_file(‘e:/新能源.png)
程序就这样完成了。运行结果如下图:
注意词云实例化参数中的max_font_size决定了这个词云图中最大号词的字号,font_path指向的是Windows系统中的黑体字,如果想使用其他字体,需要指向对应的字体文件。整理后完整代码如图。