最近python真的是风头无两,朋友圈都挤满了各种报名python零基础班的分享链接。佛性如我,抱着心爱的可乐枸杞也无法做到不悲不喜了,毅然决定开始学python。
考虑到平时对时事政治关注并不多,借此机会了解下这些年政府工作报告都写了些什么也未尝不可。那就用python来分析下,2008年至2017年这十年间,政府工作报告都写了些什么吧!
一、报告中的高频词
对于单个字的统计并不能给出太多有效的信息,因此我首先选择以词为单位进行分析。这就涉及到了分词,目前比较主流的中文分词工具有中科院分词系统(NLPIR)、THU Lexical Analyzer for Chinese(THULAC)、ik-analyzer、jieba、ansj等。考虑到分词过程中会出现大量的无实质含义的代词、助词等语素,添加stopwords列表过滤部分无实意的词将有助于提高分析的效率,因此我选择了支持自定义词典的jieba分词工具来进行后续的分析。
下图的对比结果(左:原文档;右:分词结果)可以看出来,分词工具的结果基本上是令人满意的。当然,还是存在部分专有词汇无法识别,例如“十八届六中全会”被识别为了“十八”和“六中全会”。如果这种错误分词存在巨大歧义的话,可以考虑添加自定义词库进行逐个录入。
分词完成之后,考虑以词云的方式呈现每一年报告中的高频词。词云中每一个词的大小与其出现的频次相关,因此词云可以比较直观的反映出每份报告中最常被提及的词汇。生成词云的工具也有很多,这里使用的是wordcloud工具包。
下面我罗列了所有十份报告的词云。可以看到,“发展”这个词是所有十份报告中当之无愧的第一高频词。联想到十九大报告中的“我国社会主要矛盾的变化,没有改变我们对我国社会主义所处历史阶段的判断,我国仍处于并将长期处于社会主义初级阶段的基本国情没有变,我国是世界最大发展中国家的国际地位没有变。”嗯,我国是世界最大发展中国家的国际地位没有变。
二、报告中的名词关键词
首先,关键词与高频词有什么不一样呢?高频词单纯只统计了这个词的出现频率,如果没有添加stopwords,那么最高频的词将会是“的”、“是”、“在”之类没有实意的词。所以我们可以看出,一个词出现的频率并不能完全代表这个词在这篇文章中的关键性。即,高频词不等于关键词。
因此,我将要在下面的文章中继续分析各个词在这篇文章中的关键性(权重)。
对于关键词的抽取,分词工具包实现了两个算法:TF-IDF算法和TextRank算法。两种算法都是无监督学习的算法,即对文章中的各个词进行打分,然后输出分值最高的词作为关键词。两种算法的差异在于,各自的打分策略不同。
TF-IDF算法基于两个指标(TF和IDF)的乘积进行排序。TF为某个词在本文档中出现频率,即本文档中某词出现的次数与本文档中词的总数的商。IDF(Inverse Document Frequency)则是语料库中包含某个词的文档数的倒数。也就是说,某个词在本文档中出现的频率越高(即TF越大),某个词在语料库中被包含的文档数越少(即IDF越大),则某个词的TF-IDF越大,则这个词在TF-IDF算法中更容易被标记为关键词。
需要注意到,这里面有一个语料库的存在,这个外源性的语料库将对关键词抽取的结果产生影响。如果语料库中存在大量文言文的语料,那么新文化运动之后产生的新词汇的IDF将会比文言文词汇的IDF更大,即更容易被标记为关键词。反之亦然。
TextRank则是完全基于文档本身进行关键词计算排序的算法。该算法根据词与词之间的语法和位置关系,并通过多次迭代得到稳定的节点权重。其最终结果与节点、节点与其他节点的关联性以及与之关联的节点的权重相关。限于篇幅(其实是太麻烦)在这里就不赘述TextRank的具体计算步骤。
为了排除外源性的影响,选择完全基于文档本身的关键词抽取方法——TextRank。
提取了十份报告中的各自排序前30的名词关键词。并对300个关键词进行初步处理,整合重复关键词并删除其中无明显指向性的词语。基本处理结束后,得到十份报告最终的名词关键词,一共45个词,见下图。可以看到“发展”、“改革”和“经济”毫无疑问是报告中关键词前三甲。
为了更好的看出十份报告的逐年趋势,下面将部分关键词抽取出来单独加以分析。
根据十份报告的综合权重,选取排名前五的关键词进行单独分析,结果如下图。可以看出“发展”除了2008年的报告以外,一直是当之无愧的第一关键词。同时,“建设”的权重呈现轻微下降的趋势。与之相对的是,“改革”的权重呈现上升的趋势。此外,“经济”作为唯一进入前五的行业关键词也说明了经济在我国的重要地位。
那么,各个行业之间的对比呢?摘取45个关键词中涉及行业产业的关键词进行分析,结果见下图。我们可以看到“经济”的权重远高于其他几个关键词。“文化”和“教育”的趋势基本一致。“农业”自2015年报告以来没有进入当年报告的前30。近年来,“安全”开始成为关注的重点。
此外还有一些有趣的发现,例如下图。我们可以看到“农村”的权重在十年间呈现下降的趋势。同时,“企业”的权重自2014年开始呈现上升的趋势。
三、报告中的地理名词
分词工具在抽取关键词的同时还实现了词性筛选的功能。那么,哪些地方在报告中权重更高呢?用词性(地理相关的词性)来筛选分词之后,再次抽取十份报告的前30个关键词。经过进一步的整理筛查之后得到了68个包含地名、地理术语和地理相关词的关键词列表,其分布如下图所示。可以看出,“香港”和“澳门”作为特别行政区在报告中的权重较高。此外,“上海”、“上海浦东新区”和“滨海新区”的权重也很高。让我比较意外的是,“海洋”、“陆海”和“亚欧大陆桥”等关键词排序也非常靠前,细看发现这主要体现在2015年的报告中。
在这些涉及地理名词的关键词中还有一些有意思的发现,如下图。2014年和2015年的报告中“海洋”的权重非常高,2013年中国划定了东海防空识别区,开始重视海洋主权。自2015年的报告开始,“大国”的权重开始上升,与之对应的是中国越来越积极的参与到全球治理中。
好了,啰啰嗦嗦写了这么多,关于这十份报告的分析就写到这里了。最后我想和大家分享点写这篇文章的感受:这篇文章最不重要的就是结论,最有意思的是寻找信息量的过程。
希望这篇文章可以抛砖引玉,收到大家的意见和建议。同时,也为大家学习python的过程中增加一点乐趣。
源:本文涉及到的十份政府工作报告(2008年 - 2017年)均来自网站http://www.gov.cn/guowuyuan/baogao.htm