第八章 文本挖掘

image.png

What can be learned from 5 million books

https://www.bilibili.com/video/BV1jJ411u7Nd

This talk by Jean-Baptiste Michel and Erez Lieberman Aiden is phenomenal.

Michel, J.-B., et al. (2011). Quantitative Analysis of Culture Using Millions of Digitized Books. Science, 331, 176–182.

%%html 
<iframe src="//player.bilibili.com/player.html?aid=68934891&bvid=BV1jJ411u7Nd&cid=119471774&page=1" 
width=1000 height=600
scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

试一下谷歌图书的数据: https://books.google.com/ngrams/

数据下载: http://www.culturomics.org/home

Bag-of-words model (BOW)

Represent text as numerical feature vectors

  • We create a vocabulary of unique tokens—for example, words—from the entire set of documents.

  • We construct a feature vector from each document that contains the counts of how often each word occurs in the particular document.

Since the unique words in each document represent only a small subset of all the words in the bag-of-words vocabulary, the feature vectors will consist of mostly zeros, which is why we call them sparse

image.png

“词袋模型”(Bag of words model)假定对于一个文本:

  • 忽略词序、语法、句法;

  • 将其仅仅看做是一个词集合或组合;

  • 每个词的出现都是独立的,不依赖于其他词是否出现。

    • 文本任意一个位置出现某一个词汇是独立选择的,不受前面句子的影响。

这种假设虽然对自然语言进行了简化,便于模型化。

Document-Term Matrix (DTM)

问题:例如在新闻个性化推荐中,用户对“南京醉酒驾车事故”这个短语很感兴趣。词袋模型忽略了顺序和句法,认为用户对“南京”、“醉酒”、“驾车”和“事故”感兴趣,因此可能推荐出和“南京”、“公交车”、“事故”相关的新闻。

解决方法: 可抽取出整个短语;或者采用高阶(2阶以上)统计语言模型。例如bigram、trigram来将词序保留下来,相当于bag of bigram和bag of trigram。

Transforming words into feature vectors

A document-term matrix or term-document matrix is a mathematical matrix that describes the frequency of terms that occur in a collection of documents.

In a document-term matrix, rows correspond to documents in the collection and columns correspond to terms.

There are various schemes for determining the value that each entry in the matrix should take. One such scheme is tf-idf. They are useful in the field of natural language processing.

D1 = “I like databases”

D2 = “I hate databases”

I

like

hate

databases

D1

1

1

0

1

D2

1

0

1

1

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
count = CountVectorizer(ngram_range=(1, 2))
docs = np.array([
        'The sun is shining',
        'The weather is sweet',
        'The sun is shining and the weather is sweet'])
bag = count.fit_transform(docs)
count?
count.get_feature_names()
['and',
 'and the',
 'is',
 'is shining',
 'is sweet',
 'shining',
 'shining and',
 'sun',
 'sun is',
 'sweet',
 'the',
 'the sun',
 'the weather',
 'weather',
 'weather is']
print(count.vocabulary_) # word: position index
{'the': 5, 'sun': 3, 'is': 1, 'shining': 2, 'weather': 6, 'sweet': 4, 'and': 0}
type(bag)
scipy.sparse.csr.csr_matrix
print(bag.toarray())
[[0 1 1 1 0 1 0]
 [0 1 0 0 1 1 1]
 [1 2 1 1 1 2 1]]
import pandas as pd
pd.DataFrame(bag.toarray(), columns = count.get_feature_names())
and is shining sun sweet the weather
0 0 1 1 1 0 1 0
1 0 1 0 0 1 1 1
2 1 2 1 1 1 2 1

The sequence of items in the bag-of-words model that we just created is also called the 1-gram or unigram model: each item or token in the vocabulary represents a single word.

n-gram model

The choice of the number n in the n-gram model depends on the particular application

  • 1-gram: “the”, “sun”, “is”, “shining”

  • 2-gram: “the sun”, “sun is”, “is shining”

The CountVectorizer class in scikit-learn allows us to use different n-gram models via its ngram_range parameter.

While a 1-gram representation is used by default

we could switch to a 2-gram representation by initializing a new CountVectorizer instance with ngram_range=(2,2).

TF-IDF

Assessing word relevancy via term frequency-inverse document frequency

\[tf*idf(t, d) = tf(t, d) \times idf(t)\]
  • \(tf(t, d)\) is the term frequency of term t in document d.

  • inverse document frequency \(idf(t)\) can be calculated as: \(idf(t) = log \frac{n_d}{1 + df(d, t)}\)

Question: Why do we add the constant 1 to the denominator ?

The tf-idf equation that was implemented in scikit-learn is as follows: \(tf*idf(t, d) = tf(t, d) \times (idf(t, d) + 1)\)

SKlearn use smooth_idf=True \(idf(t) = log \frac{1+n_d}{1 + df(d, t)} + 1\)

where \(n_d\) is the total number of documents, and \(df(d, t)\) is the number of documents \(d\) that contain the term \(t\).

L2-normalization

\[l2_{x} = \frac{x} {\sqrt{\sum {x^2}}}\]

课堂作业:请根据公式计算’is’这个词在文本2中的tfidf数值?

TfidfTransformer

Scikit-learn implements yet another transformer, the TfidfTransformer, that takes the raw term frequencies from CountVectorizer as input and transforms them into tf-idfs:

from sklearn.feature_extraction.text import TfidfTransformer
np.set_printoptions(precision=2)

tfidf = TfidfTransformer(use_idf=True, norm='l2', smooth_idf=True)
print(tfidf.fit_transform(count.fit_transform(docs)).toarray())
[[0.   0.43 0.56 0.56 0.   0.43 0.  ]
 [0.   0.43 0.   0.   0.56 0.43 0.56]
 [0.4  0.48 0.31 0.31 0.31 0.48 0.31]]
from sklearn.feature_extraction.text import TfidfTransformer
np.set_printoptions(precision=2)

tfidf = TfidfTransformer(use_idf=True, norm=None, smooth_idf=True)
print(tfidf.fit_transform(count.fit_transform(docs)).toarray())
[[0.   1.   1.29 1.29 0.   1.   0.  ]
 [0.   1.   0.   0.   1.29 1.   1.29]
 [1.69 2.   1.29 1.29 1.29 2.   1.29]]
import pandas as pd
bag = tfidf.fit_transform(count.fit_transform(docs))
pd.DataFrame(bag.toarray(), columns = count.get_feature_names())
and is shining sun sweet the weather
0 0.000000 1.0 1.287682 1.287682 0.000000 1.0 0.000000
1 0.000000 1.0 0.000000 0.000000 1.287682 1.0 1.287682
2 1.693147 2.0 1.287682 1.287682 1.287682 2.0 1.287682
# 一个词的tfidf值
import numpy as np
tf_is = 2.0
n_docs = 3.0
# smooth_idf=True & norm = None
idf_is = np.log((1+n_docs) / (1+3)) + 1

tfidf_is = tf_is * idf_is
print('tf-idf of term "is" = %.2f' % tfidf_is)
tf-idf of term "is" = 2.00
# *最后一个文本*里的词的tfidf原始数值(未标准化)
tfidf = TfidfTransformer(use_idf=True, norm=None, smooth_idf=True)
raw_tfidf = tfidf.fit_transform(count.fit_transform(docs)).toarray()[-1]
raw_tfidf, count.get_feature_names()
(array([1.69, 2.  , 1.29, 1.29, 1.29, 2.  , 1.29]),
 ['and', 'is', 'shining', 'sun', 'sweet', 'the', 'weather'])
# l2标准化后的tfidf数值
l2_tfidf = raw_tfidf / np.sqrt(np.sum(raw_tfidf**2))
l2_tfidf 
array([0.4 , 0.48, 0.31, 0.31, 0.31, 0.48, 0.31])

政府工作报告文本挖掘

0. 读取数据

with open('../data/gov_reports1954-2017.txt', 'r', encoding = 'utf-8') as f:
    reports = f.readlines()
len(reports)
48
print(reports[0][:1000])
1954	1954年政府工作报告——1954年5月23日在中华人民共和国第一届全国人民代表大会第一次会议上                          国务院总理周恩来各位代表:  我们第一届全国人民代表大会第一次会议,在听了刘少奇同志关于宪法草案的报告并进行了三天的讨论以后,已经光荣地完成了一件历史性的工作,通过了我们国家的根本法——中华人民共和国宪法,接着,又通过了几个重要的法律。现在,我代表中央人民政府作工作报告。  我国伟大的人民革命的根本目的,是在于从帝国主义、封建主义和官僚资本主义的压迫下面,最后也从资本主义的束缚和小生产的限制下面,解放我国的生产力,使我国国民经济能够沿着社会主义的道路而得到有计划的迅速的发展,以便提高人民的物质生活和文化生活的水平,并且巩固我们国家的独立和安全。我国的经济原来是很落后的;如果我们不建设起强大的现代化的工业、现代化的农业、现代化的交通运输业和现代化的国防,我们就不能摆脱落后和贫困,我们的革命就不能达到目的。在一九四九年至一九五二年间,中央人民政府按照中国人民政治协商会议共同纲领的规定,先后完成了全国大陆的统一,完成了土地制度的改革,进行了广泛的和深入的镇压反革命运动和各种民主改革运动,恢复了遭受长期战争破坏的国民经济,着重地发展了社会主义的国营经济和各种类型的合作社经济,初步地调整了公私营工商业之间的关系,这一切都为有计划地进行经济建设和逐步过渡到社会主义社会准备了必要的条件。随后,从一九五三年起,我国就开始了经济建设的第一个五年计划,着手有系统地逐步地实现国家的社会主义工业化和对农业、手工业和资本主义工商业的社会主义改造。经济建设工作在整个国家生活中已经居于首要的地位。  制订第一个五年计划的全部工作现在还没有最后完成,对于计划的许多细节还在进行补充和修订。第一个五年计划的方针是大家已经知道的,这就是:集中主要力量发展重工业,建立国家工业化和国防现代化的基础;相应地发展交通运输业、轻工业、农业和商业;相应地培养建设人才;有步骤地促进农业、手工业的合作化;继续进行对资本主义工商业的改造;保证国民经济中社会主义成份的比重稳步增长,同时正确地发挥个体农业、手工业和资本主义工商业的作用;保证在发展生产的基础上逐步提高人民物质生活和文化生活的水平。第一个五年计划所以要集中主要力量发展重工业,即冶金工业、燃料工业、动力工业、
print(reports[4][:500])
1959						1959年国务院政府工作报告	——1959年4月18日在第二届全国人民代表大会第一次会议上	                  国务院总理周恩来	各位代表:	  我现在根据国务院的决定,向第二届全国人民代表大会第一次会议作政府工作报告。	  一、第一个五年计划时期内和第二个五年计划的第一年——一九五八年的伟大成就	  在第一届全国人民代表大会的四年多的任期中间,我们的国家经历了一系列的具有重大历史意义的变化。	  当一九五四年第一届全国人民代表大会第一次会议召开的时候,我国社会主义经济已经在国民经济中居于主导的地位,但是,我国还存在着大量的资本主义的工业和商业,并且大量地存在着个体的农业和手工业。农村中劳动互助运动已经广泛地发展起来,参加农业劳动互助组的农户达到了百分之六十左右,但是,组成农业生产合作社的农户还只占农户总数的百分之二左右。在那时候,我国已经完成了经济恢复时期的任务,开始了大规模的、有计划的经济建设。但是,究竟我们能不能在一个较短的时间内,使我国这样一个有六亿多人口的大国,建立起社会主义工业化的基础来,还有待于事实的证明。而现在呢?大家看到,只经过四年

pip install jieba

https://github.com/fxsjy/jieba

pip install wordcloud

https://github.com/amueller/word_cloud

pip install gensim

pip install gensim
Collecting gensim
  Downloading gensim-3.8.3-cp37-cp37m-macosx_10_9_x86_64.whl (24.2 MB)
     |████████████████████████████████| 24.2 MB 376 kB/s eta 0:00:01
?25hRequirement already satisfied: scipy>=0.18.1 in /opt/anaconda3/lib/python3.7/site-packages (from gensim) (1.4.1)
Requirement already satisfied: numpy>=1.11.3 in /opt/anaconda3/lib/python3.7/site-packages (from gensim) (1.18.1)
Requirement already satisfied: six>=1.5.0 in /opt/anaconda3/lib/python3.7/site-packages (from gensim) (1.14.0)
Collecting smart-open>=1.8.1
  Downloading smart_open-2.0.0.tar.gz (103 kB)
     |████████████████████████████████| 103 kB 625 kB/s eta 0:00:01
?25hRequirement already satisfied: requests in /opt/anaconda3/lib/python3.7/site-packages (from smart-open>=1.8.1->gensim) (2.22.0)
Requirement already satisfied: boto in /opt/anaconda3/lib/python3.7/site-packages (from smart-open>=1.8.1->gensim) (2.49.0)
Requirement already satisfied: boto3 in /opt/anaconda3/lib/python3.7/site-packages (from smart-open>=1.8.1->gensim) (1.9.191)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /opt/anaconda3/lib/python3.7/site-packages (from requests->smart-open>=1.8.1->gensim) (1.25.8)
Requirement already satisfied: certifi>=2017.4.17 in /opt/anaconda3/lib/python3.7/site-packages (from requests->smart-open>=1.8.1->gensim) (2019.11.28)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /opt/anaconda3/lib/python3.7/site-packages (from requests->smart-open>=1.8.1->gensim) (3.0.4)
Requirement already satisfied: idna<2.9,>=2.5 in /opt/anaconda3/lib/python3.7/site-packages (from requests->smart-open>=1.8.1->gensim) (2.8)
Requirement already satisfied: s3transfer<0.3.0,>=0.2.0 in /opt/anaconda3/lib/python3.7/site-packages (from boto3->smart-open>=1.8.1->gensim) (0.2.1)
Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /opt/anaconda3/lib/python3.7/site-packages (from boto3->smart-open>=1.8.1->gensim) (0.9.5)
Requirement already satisfied: botocore<1.13.0,>=1.12.191 in /opt/anaconda3/lib/python3.7/site-packages (from boto3->smart-open>=1.8.1->gensim) (1.12.191)
Requirement already satisfied: docutils>=0.10 in /opt/anaconda3/lib/python3.7/site-packages (from botocore<1.13.0,>=1.12.191->boto3->smart-open>=1.8.1->gensim) (0.16)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /opt/anaconda3/lib/python3.7/site-packages (from botocore<1.13.0,>=1.12.191->boto3->smart-open>=1.8.1->gensim) (2.8.1)
Building wheels for collected packages: smart-open
  Building wheel for smart-open (setup.py) ... ?25ldone
?25h  Created wheel for smart-open: filename=smart_open-2.0.0-py3-none-any.whl size=101341 sha256=373e4939f516de66ae607886c52d7a00529e0930868ce9f5ae1ecec2297f40f4
  Stored in directory: /Users/datalab/Library/Caches/pip/wheels/bb/1c/9c/412ec03f6d5ac7d41f4b965bde3fc0d1bd201da5ba3e2636de
Successfully built smart-open
Installing collected packages: smart-open, gensim
Successfully installed gensim-3.8.3 smart-open-2.0.0
Note: you may need to restart the kernel to use updated packages.
%matplotlib inline
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import sys 
import numpy as np
from collections import defaultdict
import statsmodels.api as sm
from wordcloud import WordCloud
import jieba
import matplotlib
import gensim
from gensim import corpora, models, similarities
from gensim.utils import simple_preprocess
from gensim.parsing.preprocessing import STOPWORDS
#matplotlib.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #指定默认字体 
matplotlib.rc("savefig", dpi=400)
# 为了确保中文可以在matplotlib里正确显示
#matplotlib.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #指定默认字体 
# 需要确定系统安装了Microsoft YaHei
# import matplotlib
# my_font = matplotlib.font_manager.FontProperties(
#     fname='/Users/chengjun/github/cjc/data/msyh.ttf')

1. 分词

import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式

seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))
Building prefix dict from the default dictionary ...
Dumping model to file cache /var/folders/8b/hhnbt0nd4zsg2qhxc28q23w80000gn/T/jieba.cache
Loading model cost 0.941 seconds.
Prefix dict has been built successfully.
Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
Default Mode: 我/ 来到/ 北京/ 清华大学
他, 来到, 了, 网易, 杭研, 大厦
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

2. 停用词

filename = '../data/stopwords.txt'
stopwords = {}
f = open(filename, 'r')
line = f.readline().rstrip()
while line:
    stopwords.setdefault(line, 0)
    stopwords[line] = 1
    line = f.readline().rstrip()
f.close()
adding_stopwords = [u'我们', u'要', u'地', u'有', u'这', u'人',
                    u'发展',u'建设',u'加强',u'继续',u'对',u'等',
                    u'推进',u'工作',u'增加']
for s in adding_stopwords: stopwords[s]=10

3. 关键词抽取

基于TF-IDF 算法的关键词抽取

import jieba.analyse
txt = reports[-1]
tf = jieba.analyse.extract_tags(txt, topK=200, withWeight=True)
u"、".join([i[0] for i in tf[:50]])
'发展、改革、推进、建设、加强、加快、推动、深化、完善、创新、就业、全面、促进、经济、政府、深入、实施、提高、企业、支持、群众、服务、坚持、人民、坚决、制度、治理、政策、农村、试点、扩大、机制、社会、落实、工作、保障、增长、国家、生态、安全、今年、稳定、继续、地区、保护、中国、合作、产能、维护、重点'
plt.hist([i[1] for i in tf])
plt.show()
_images/10-text-minning-gov-report_56_0.png

基于 TextRank 算法的关键词抽取

tr = jieba.analyse.textrank(txt,topK=200, withWeight=True)
u"、".join([i[0] for i in tr[:50]])
'发展、改革、推进、建设、经济、加强、推动、加快、政府、完善、创新、企业、全面、实施、促进、提高、支持、服务、政策、深入、中国、就业、国家、制度、群众、社会、人民、地区、坚持、扩大、农村、地方、保护、继续、增长、机制、工作、保障、治理、试点、合作、综合、重点、市场、投资、领域、加大、消费、制定、维护'
plt.hist([i[1] for i in tr])
plt.show()
_images/10-text-minning-gov-report_59_0.png
import pandas as pd

def keywords(index):
    txt = reports[-index]
    tf = jieba.analyse.extract_tags(txt, topK=200, withWeight=True)
    tr = jieba.analyse.textrank(txt,topK=200, withWeight=True)
    tfdata = pd.DataFrame(tf, columns=['word', 'tfidf'])
    trdata = pd.DataFrame(tr, columns=['word', 'textrank'])
    worddata = pd.merge(tfdata, trdata, on='word')
    fig = plt.figure(figsize=(16, 6),facecolor='white')
    plt.plot(worddata.tfidf, worddata.textrank, linestyle='',marker='.')
    for i in range(len(worddata.word)):
        plt.text(worddata.tfidf[i], worddata.textrank[i], worddata.word[i], 
                 fontsize = worddata.textrank[i]*30, 
                 color = 'red', rotation = 0
                )
    plt.title(txt[:4])
    plt.xlabel('Tf-Idf')
    plt.ylabel('TextRank')
    plt.show()
keywords(1)
_images/10-text-minning-gov-report_61_0.png
keywords(2)
_images/10-text-minning-gov-report_62_0.png
keywords(3)
_images/10-text-minning-gov-report_63_0.png

TextRank: Bringing Order into Texts

基本思想:

  • 将待抽取关键词的文本进行分词

  • 以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图

  • 计算图中节点的PageRank,注意是无向带权图

4. 词云

def wordcloudplot(txt, year):
    wordcloud = WordCloud(font_path='../data/msyh.ttf').generate(txt)
    # Open a plot of the generated image.
    fig = plt.figure(figsize=(16, 6),facecolor='white')
    plt.imshow(wordcloud)
    plt.title(year)
    plt.axis("off")
    #plt.show()

基于tfidf过滤的词云

txt = reports[-1]
tfidf200= jieba.analyse.extract_tags(txt, topK=200, withWeight=False)
seg_list = jieba.cut(txt, cut_all=False)
seg_list = [i for i in seg_list if i in tfidf200]
txt200 = r' '.join(seg_list)
wordcloudplot(txt200, txt[:4]) 
_images/10-text-minning-gov-report_68_0.png
txt = reports[-2]
tfidf200= jieba.analyse.extract_tags(txt, topK=200, withWeight=False)
seg_list = jieba.cut(txt, cut_all=False)
seg_list = [i for i in seg_list if i in tfidf200]
txt200 = r' '.join(seg_list)
wordcloudplot(txt200, txt[:4]) 
_images/10-text-minning-gov-report_69_0.png
wordfreq = defaultdict(int)
for i in seg_list:
    wordfreq[i] +=1
wordfreq = [[i, wordfreq[i]] for i in wordfreq]

wordfreq.sort(key= lambda x:x[1], reverse = True )
u"、 ".join([ i[0] + u'(' + str(i[1]) +u')' for i in wordfreq ])
'发展(125)、 改革(68)、 推进(65)、 建设(54)、 经济(52)、 加强(45)、 推动(42)、 加快(40)、 政府(36)、 创新(36)、 完善(35)、 企业(35)、 全面(35)、 促进(34)、 提高(32)、 就业(31)、 实施(31)、 中国(31)、 支持(29)、 深化(29)、 政策(28)、 服务(27)、 国家(26)、 人民(26)、 工作(26)、 制度(25)、 我们(25)、 深入(25)、 社会(25)、 增长(25)、 群众(24)、 坚持(24)、 今年(23)、 继续(23)、 地区(22)、 扩大(22)、 农村(20)、 坚决(20)、 机制(19)、 治理(19)、 稳定(19)、 地方(19)、 保障(18)、 安全(18)、 保护(18)、 持续(17)、 合作(17)、 市场(17)、 重点(17)、 实现(17)、 消费(16)、 投资(16)、 综合(16)、 落实(16)、 试点(16)、 结构(15)、 有效(15)、 维护(15)、 加大(15)、 产能(15)、 积极(15)、 领域(15)、 教育(15)、 改善(14)、 国际(14)、 国内(14)、 城市(14)、 我国(14)、 生态(14)、 以上(14)、 基本(14)、 问题(14)、 强化(13)、 增加(13)、 农业(13)、 提升(13)、 制定(13)、 力度(13)、 质量(13)、 引导(13)、 降低(13)、 依法(12)、 战略(12)、 升级(12)、 重要(12)、 标准(12)、 作用(12)、 健康(12)、 保持(12)、 增强(12)、 生产(12)、 文化(12)、 更加(12)、 必须(12)、 创业(12)、 目标(12)、 民生(12)、 下降(12)、 确保(11)、 取得(11)、 供给(11)、 生活(11)、 核心(11)、 规范(11)、 环境(11)、 收费(11)、 进一步(11)、 管理(11)、 做好(10)、 完成(10)、 资金(10)、 能力(10)、 不断(10)、 开展(10)、 产业(10)、 健全(10)、 水平(10)、 科技(10)、 体系(10)、 风险(10)、 世界(10)、 鼓励(10)、 重大(10)、 一年(10)、 监管(10)、 一批(10)、 困难(10)、 突出(9)、 代表(9)、 责任(9)、 金融(9)、 全国(9)、 大力(9)、 行政(9)、 区域(9)、 体制改革(9)、 减少(9)、 贯彻(9)、 组织(9)、 经济社会(9)、 国务院(8)、 各位(8)、 协调(8)、 制造(8)、 发挥(8)、 合理(8)、 优化(8)、 扶贫(8)、 调控(8)、 习近平(8)、 党中央(8)、 专项(8)、 动能(8)、 现代化(8)、 资源(8)、 城镇(8)、 行动(8)、 文明(7)、 全年(7)、 取消(7)、 住房(7)、 新型(7)、 万人(7)、 特色(7)、 生产总值(7)、 出台(7)、 引领(7)、 城乡(7)、 实体(7)、 更好(7)、 基础设施(7)、 和谐(7)、 高校(7)、 脱贫(7)、 改造(7)、 抓好(6)、 严肃查处(6)、 转型(6)、 新兴产业(6)、 打造(6)、 互联网(6)、 对外开放(6)、 补助(6)、 结构性(6)、 扎实(6)、 减税(6)、 涉企(6)、 培育(6)、 补短(6)、 办好(5)、 双创(5)、 精准(5)、 督查(5)、 试验区(5)、 医保(5)、 政策措施(5)、 实干(5)、 2000(4)、 降费(4)、 问责(4)'

基于停用词过滤的词云

#jieba.add_word('股灾', freq=100, tag=None) 

txt = reports[-1]
seg_list = jieba.cut(txt, cut_all=False)
seg_list = [i for i in seg_list if i not in stopwords]
txt = r' '.join(seg_list)
wordcloudplot(txt, txt[:4])  
#file_path = '/Users/chengjun/GitHub/cjc2016/figures/wordcloud-' + txt[:4] + '.png'
#plt.savefig(file_path,dpi = 300, bbox_inches="tight",transparent = True)
_images/10-text-minning-gov-report_72_0.png

绘制1954-2016政府工作报告词云

#jieba.add_word('股灾', freq=100, tag=None) 

for txt in reports:
    seg_list = jieba.cut(txt, cut_all=False)
    seg_list = [i for i in seg_list if i not in stopwords]
    txt = r' '.join(seg_list)
    wordcloudplot(txt, txt[:4]) 
    file_path = '../figure/wordcloud-' + txt[:4] + '.png'
    plt.savefig(file_path,dpi = 400, bbox_inches="tight",\
                transparent = True)
_images/10-text-minning-gov-report_74_0.png

5. 词向量的时间序列

reports[0][:500]
'1954\t1954年政府工作报告——1954年5月23日在中华人民共和国第一届全国人民代表大会第一次会议上\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\xa0 国务院总理周恩来各位代表:\u3000\u3000我们第一届全国人民代表大会第一次会议,在听了刘少奇同志关于宪法草案的报告并进行了三天的讨论以后,已经光荣地完成了一件历史性的工作,通过了我们国家的根本法——中华人民共和国宪法,接着,又通过了几个重要的法律。现在,我代表中央人民政府作工作报告。\u3000\u3000我国伟大的人民革命的根本目的,是在于从帝国主义、封建主义和官僚资本主义的压迫下面,最后也从资本主义的束缚和小生产的限制下面,解放我国的生产力,使我国国民经济能够沿着社会主义的道路而得到有计划的迅速的发展,以便提高人民的物质生活和文化生活的水平,并且巩固我们国家的独立和安全。我国的经济原来是很落后的;如果我们不建设起强大的现代化的工业、现代化的农业、现代化的交通运输业和现代化的国防,我们就不能摆脱落后和贫困,我们的革命就不能达到目的。在一九四九年至一九五二年间,中央人民政府按照中国人民政治协商会议共同纲领的规定,先后完成了全国大陆的统一,完成了土地制度的改革,进'
reports[1][:500]
'1955\t1955年国务院政府工作报告关于发展国民经济的第一个五年计划的报告\xa0——1955年7月5日至6日在第一届全国人民代表大会第二次会议上\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\xa0 国务院副总理兼国家计划委员会主任李富春目录\xa0 一、国家在过渡时期的总任务\xa0 二、第一个五年计划概要\xa0 三、第一个五年计划的若干问题\xa0 (一)关于工业和运输业的基本建设问题\xa0 (二)关于工业的生产问题\xa0 (三)关于农业的增产问题\xa0 (四)关于对资本主义工商业的社会主义改造问题\xa0 (五)关于保证市场的稳定问题\xa0 (六)关于培养建设干部问题\xa0 (七)关于提高人民的物质生活和文化生活的水平问题\xa0 (八)关于厉行节约问题\xa0 (九)关于苏联和各人民民主国家同我国建设的关系\u3000四、为完成和超额完成第一个五年计划而奋斗\t\t\u3000\u3000各位代表:\u3000\u3000中华人民共和国国务院向第一届全国人民代表大会第二次会议提出关于发展国民经济第一个五年计划的议案,我现在代表国务院向本次大会作关于第一个五年计划的报告。\u3000\u3000中华人民共和国发展国民经济的第一个五年计划草案,是在中国共产党中央委员会和毛泽东主席的直接领导下编制完成的。一九五五年三月间经过中国共产党的全国代表会'
test = jieba.analyse.textrank(reports[0], topK=200, withWeight=False)
test = jieba.analyse.extract_tags(reports[1], topK=200, withWeight=False)
help(jieba.analyse.extract_tags)
Help on method extract_tags in module jieba.analyse.tfidf:

extract_tags(sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False) method of jieba.analyse.tfidf.TFIDF instance
    Extract keywords from sentence using TF-IDF algorithm.
    Parameter:
        - topK: return how many top keywords. `None` for all possible words.
        - withWeight: if True, return a list of (word, weight);
                      if False, return a list of words.
        - allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v','nr'].
                    if the POS of w is not in this list,it will be filtered.
        - withFlag: only work with allowPOS is not empty.
                    if True, return a list of pair(word, weight) like posseg.cut
                    if False, return a list of words
import jieba.analyse

wordset = []
for k, txt in enumerate(reports):
    print(k)
    top20= jieba.analyse.extract_tags(txt, topK=200, withWeight=False)
    for w in top20:
        if w not in wordset:
            wordset.append(w)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
len(wordset)
1717
print(' '.join(wordset))
人民 我们 国家 我国 一九五三年 工业 一九五四年 必须 工作 建设 发展 和平 一九四九年 社会主义 一九五 国家机关 生产 计划 全国 农业 亚洲 美国 事业 企业 应当 经济 这些 改造 增加 并且 完成 但是 已经 等于 合作社 集团 方面 需要 台湾 资本主义 反对 几年 生活 建立 为了 技术 这个 进行 日内瓦 问题 一九五二年 各级 侵略 中央人民政府 可以 比重 改善 东南亚 现代化 中国 关系 反革命 卖国 会议 对于 条约 浪费 加强 注意 保证 任务 努力 正在 军事同盟 根据 能够 组织 基本建设 克服 少数民族 文化 全国人民代表大会 许多 工作人员 总产值 领导 职工 协议 重要 过去 困难 提高 战争 印度支那 今年 迅速 政府 逐步 国营商业 合作 五年 现在 参加 集体 他们 分子 一切 世界 公私合营 解决 商业 机关 得到 现象 因为 今后 其他 民主 胜利 完全 力量 斗争 苏联 群众 地方 计划供应 朝鲜 防务 五年计划 容许 重工业 改进 没有 百分之三十 实行 不能 人民代表大会 所谓 财政 政策 解放 社会 广大 运动 产量 很大 充分 缺点 安全 官僚主义 国营 巩固 不少 落后 增长 达到 一个 恢复 由于 农民 交通运输业 原则 中华人民共和国 而且 各国 中央 依靠 教育 人民共和国 实现 选举 节约 四点 破坏 关于 代表 保障 工业化 破坏活动 时期 作用 百分之八十 资金 采取 棉花 保卫 利益 同时 权利 主要 或者 华侨 制度 不顾 继续 法律 劳动 蒋介石 预算 就是 应该 增产 第一个 私营 国民经济 工商业 单位 一九五七年 可能 年产能力 过渡时期 适当 规定 基础 各种 供应 产品 万吨 水平 投资 帮助 手工业 这种 设计 限额 工厂 粮食 这样 扩大 形式 合作化 制造 积极 条件 工人 建成 资本家 部门 铁路 非生产性 原料 援助 收购 工业生产 因此 方针 加以 两年 经验 规模 新建 工程 全部 超额完成 总任务 设备 中国共产党 厂矿 指标 工人阶级 轻工业 产值 办法 百分之五十 定货 必要 周转量 文化教育 以上 情况 特别 学习 团结 某些 错误 职员 发挥 重大 施工 培养 百分之七十 工业品 播种面积 有些 一些 按照 地区 它们 巨大 要求 开始 百分之一百 曾经 一百五十 农村 改建 帝国主义 支出 上年 收入 国家决算 占本 万人 决算 总数 建设费 亿斤 国营企业 原定 年收入 文教 一部分 减少 铺轨 农户 比较 收支 执行 上升 在校学生 本年 片面 数字 准备 税收 农业税 部分 提前完成 国防费 立井 工业部 收到 货物 降低 拨付 秋征 钢材 其中 扣除 亿元 比例 实际 将要 节减 年内 以外 中所 去年 万担 行政 工农业 项目 公路 年本 包括 数额 中央预算 除了 建筑安装 信贷资金 年度计划 债款 万亩 以内 调整 去年同期 招生 公方 合理 状况 超过 质量 下降 储备 预计 国家计划 农林水利 国家银行 工资 开支 可比 其他支出 过程 用于 奖励制度 农业贷款 灌溉面积 物资 1956 共占本 商品流转 零售总额 统购 共产党 革命 科学 右派分子 资产阶级 思想 政治 科学事业 基本 工农 宗派主义 高等学校 统一战线 偏差 成绩 这是 取得 不够 有人 提出 甚至 科学家 知识分子 科学研究 民主党派 一年 存在 学生 因而 如果 时候 三年 经过 整风运动 工资制度 意见 制订 不是 批判 殖民主义 否定 一定 大团结 性质 高级 研究 正确 改革 还有 任何 学徒 更加 学校 例如 队伍 三大 规划 之间 日益 阵营 解放以来 集中 企图 少数 阶级 个别 内部 悬殊 一九五八年 一九五九年 鼓掌 热烈鼓掌 西藏 跃进 民族 大跃进 干部 同时并举 战线 人民公社 美帝国主义 运输 总路线 土法生产 群众运动 体力劳动 爱好和平 相结合 各个 帝国主义者 岸信 自我改造 全世界 阿拉伯 贯彻执行 开展 反动分子 百分之四十 自己 独立 伟大 叛乱 日本 劳动力 友好 中间 长时间 积极性 以后 掌声 服务 西藏地方 首先 起来 绝对数 叛乱分子 活动 威胁 二千 生产资料 共产主义 普及 掌握 纲要 食堂 机械化 社办 半机械化 八字宪法 公社 提前 一九五六年 棉田 十二年 消灭 所有制 人民公社化 养猪 草案 平均 农具 普遍 措施 四十斤 群众性 改良 大大 四年 基本上 六十斤 效益 办好 麻雀 危害 技术革新 五亿 各地 精耕细作 因地 七千 分配制度 更好 分别 高级社 防治 每人 广大群众 耕地 社员 毛泽东 除四害 1960 一九六七年 公布 不仅 公共 坚持 八十斤 过渡 举办 大办 卫生事业 争取 托儿所 五千 皮棉 一百斤 科学试验 才能 纲领 还要 百分之二十 亿亩 面积 动员 同志 赶上 化肥厂 农作物 充分发挥 多种经营 进一步 不断 病疫 园田化 办得 病虫害 做到 二百 兴办 鼓足干劲 零四个 整个 亩产量 一千 合理密植 集体福利 一九六二年 总产量 事情 社有 八十五 周总理 无产阶级 阶级斗争 反动派 自力更生 修正主义 毛主席 革命化 马克思列宁主义 指出 彻底 支持 一九六四年 毛泽东思想 一九六五年 现代 坚决 走狗 对外 复辟 革命斗争 周恩来 高举 反帝 历史 反华 核武器 支援 阴谋 新高潮 及其 总理 成就 民主革命 长期 国际威望 认识 拉丁美洲 国际主义 强大 意义 领土 巨大成就 半农半读 劳动化 下中农 文化战线 亚非 一次 封建主义 客观规律 非洲 精神 半工半读 发动 放手 强调指出 武装 总结经验 专政 工农兵 路线 批林批孔 马克思主义 超级大国 被压迫 各族人民 文化大革命 一九七五年 上层建筑 争议地区 1975 国务院 深入 各位 团结起来 设想 边界 武装冲突 统一 争夺 第三世界 两国关系 一九七四年 十年 大革命 永远 斗批改 本世纪内 加强团结 一九八 二倍 互不侵犯 宏伟目标 列宁主义 领域 伟大胜利 认真执行 路线斗争 两个 霸权主义 美苏 发动群众 不要 激烈 一点 新生事物 三届 全心全意 中苏 广大干部 称霸 贫下中农 三倍 国际形势 继续执行 工业体系 第二步 第四个 蓬勃发展 战备 人民解放军 颠覆 林彪 二十多年 共同努力 第四届 双方 教导 互不 委员会 三点 联合 两步 不论是 武装力量 人大 第一步 封锁 方向 民兵 武力 党中央 理论 文艺 第三个 报告 粉碎 经济危机 缓和 战胜 卫生 争论 往来 克服缺点 发扬成绩 洋奴哲学 百分之八十五 光荣任务 学大庆 脱离 那么 四人帮 搞好 揭批 整顿 认真 科学技术 作风 强国 打击 社队 十年规划 指示 各项 反霸 干扰 高速度 各条战线 一九七六年 先进 篡党夺权 两霸 四届 召开 基地 两国人民 大寨 大力 苏美 加快 发扬 严重 抓好 四个 切实 妄图 敌人 改变 谬论 劳动竞赛 促进 科学实验 自治区 成为 重点 正义斗争 八年 讨论 维护 轻纺 纪律 目前 制定 秩序 现有企业 当前 安定团结 法制 管理 引进 无政府主义 人口 越南 生产力 矛盾 事业单位 允许 管理体制 千分之 农副产品 义务 歪风邪气 仍然 民主集中制 祖国 试行 着重点 机械 试点 安排 自主权 上半年 明年 能源 商品 进展 标准煤 节约能源 效果 节能 经济作物 材料 提高质量 开发 结构 技术改造 勘探 奖金 一批 经营 竞争 自销 有所改善 工业锅炉 住宅 积累率 共生矿 购买力 能耗 综合利用 油料 前进 城乡人民 市场 协作 调查 烧油 积累 劳动保护 生活资料 生产能力 指导 大力开展 集体所有制 调动 对外贸易 流通 亿吨 消费品 进出口 上缴利润 原材料 党和政府 缝纫机 不足 发展缓慢 自行车 通过 品种 多年 联合体 经济效益 责任制 利用 全面 精神文明 国民收入 交通 速度 显著 现有 做好 分配 以及 物价 结合 石油 相当 平衡 财政收支 这方面 城市 作出 有步骤 稳定 犯罪分子 不同 财政收入 国际 防止 第六个 一九八五年 一九八一年 递增 六五 每年 期间 一九八二年 百分之四点 固定资产 建设项目 经济体制 进步 根本好转 百分之五点 一律 着重 社会风气 一项 技术水平 严格控制 国家计委 全局 翻两番 形势 六千 财经纪律 百分之四 不合理 大量 一九七八年 政法 抓紧 一九七九年 城乡 科技 大力加强 纠正 宪法 体制 国防 财力 智力开发 长期存在 有效 上交 体育 前提 造成 多种形式 种种 振兴 五项原则 和平共处 精神污染 紧张局势 承包 有利于 利改税 包干 裁军 主张 一九八三年 建筑业 愿意 香港 友好合作 核国家 核裁军 希望 平等互利 社会制度 税利 经济特区 共同 决不 供销社 批发 购销 所有 承包单位 核军备 赞成 人才 具有 大锅饭 增进 和睦相处 推行 交流 使用 科研单位 审批 社会治安 科研 保持 价格 工资改革 搞活 不正之风 价格体系 工资总额 消费基金 消费 推动 随着 坚定不移 在改革中 货币 增加收入 大中型 产业结构 基数 增长速度 顺利进行 城乡居民 符合 核定 1985 补贴 信贷 城乡经济 增强 控制 四化 大幅度 部署 迈出 决不能 决定 追求 向前 专业银行 协调 坚决贯彻 统一认识 出发 基金 持续增长 考虑 步调 宏观经济 长远利益 放开 消费者 七五 第七个 商品经济 投资规模 出口 能力 充分认识 实践 五五 适应 出口创汇 对外开放 完善 外汇 进口 运用 恰当 出现 手段 观念 活力 九十年代 开放 调节 越来越 更新改造 贸易 加工工业 转变 自由化 四项 增产节约 增收节支 切实加强 思潮 努力提高 人们 推进 政治局面 方针政策 批评 横向联合 特色 十一届三中全会 经营机制 及时 健全 真正 不变 正常 重视 引导 经营责任制 创造 一系列 机构 目标 柬埔寨 体制改革 深化 外向型 实施 理顺 改革开放 计划生育 发展中国家 鼓励 改革方案 法制建设 综合 科技进步 解放思想 军队 沿海地区 贯彻 探索 大力发展 繁荣 深化改革 职能 治理整顿 压缩 监督 清理 经济秩序 教育经费 严格 各类 总需求 物价上涨 环境 劳动生产率 储蓄 治理 需求 素质 有关 产业政策 依法 通货膨胀 公司 宏观调控 制止 密切 审计 缓建 农业投入 党政机关 紧张 责任 根本利益 乡镇企业 市场调节 动乱 暴乱 廉政建设 贷款 中国政府 计划经济 中华民族 内政 风波 联合声明 违法违纪 案件 指令性 道路 自觉 以来 一九九一年 一九九 产品质量 新增 全民 全年 农产品 生活费用 一亿 调整结构 回升 建成投产 千万吨 煤炭 零售物价 投入 推广 里程 总量 三千八百 六百 新品种 丰收 一千六百 四百五十 提高效益 高等院校 引进技术 九千 亿公斤 油田 开拓市场 非贸易 三千 化肥 四千 大体 开发新 扩大开放 人权 继续加强 开拓 民主监督 海外侨胞 两岸关系 祖国统一 步伐 欢迎 科技成果 集中力量 深入开展 树立 计划体制 保护 机制 综合治理 八五 澳门 高新技术 国内 无党派人士 实力 精简 基础设施 人员 住房 第三产业 国有企业 市场经济 社会化 和平统一 各项事业 一手 建立健全 十四大 范围 城镇 环境保护 形成 勤政廉政 外贸体制 人均 生产总值 交通运输 办学 健康 国民 国有 顺利 财税 突出 邓小平 良好 持续 农民收入 江泽民 自治 银行 共同愿望 1994 投资体制 开发区 稳妥 加以解决 香港特别行政区 腐败现象 廉洁自律 乱收费 落实 犯罪活动 九五 职业 认真贯彻 推进改革 市场需求 始终不渝 四是 1995 体系 义务教育 全面进步 体育事业 流动人口 中西部 民主法制 资源 年均 十五年 方式 战略 初步 社会保障 民族团结 主体 扶贫 正确处理 经济社会 格局 作为 行使主权 贫困人口 优化 积极参与 奋斗目标 注重 改组 就业 行业 兼并 产业 规范 国有经济 水利建设 小企业 一国两制 结构调整 负责制 征管 大型 破产 国有资产 资本金 适用技术 力度 倾斜 治安状况 放活 多亿元 适度从紧 金融 邓小平理论 广泛开展 回归祖国 下岗职工 盲目 投融资 股份合作制 加大 有利条件 思想道德 全国代表大会 伟大旗帜 金融风险 1999 财政赤字 科教兴国 防范 利用外资 小城镇 严厉打击 澳门特别行政区 财政政策 扩大出口 严肃查处 拓宽 强化 确保 外商投资 大多数 中央财政 1000 21 养老金 重复 金融危机 工程建设 金融机构 脱困 2000 国债 离退休 扩大内需 失业 严格执行 统一大业 台湾同胞 贯彻落实 三是 工作力度 有力 高度重视 认真落实 反腐败 招标 二是 十五 西部 服务业 创新 优势 2001 升级 传统产业 放在 高技术 科研院所 生态环境 战略性 积极探索 着力 因地制宜 培育 二要 战略目标 创新能力 世贸组织 退耕还林 农村税费 农民负担 发放 三个代表 加入 竞争力 足额 按时 尽快 政府职能 信息化 财政预算 行为 信息 总体 2002 主产区 重组 万亿元 产业化 不断加强 依法行政 万公里 三农 带动 亿美元 非典 公共卫生 非公有制 决策 农民工 统筹 调控 疫情 拖欠 监管 医疗卫生 补助 东北地区 合法权益 股份制 种粮 预防 自主 区域 基层 经济运行 发展观 和谐社会 群众利益 贫困家庭 2005 新进展 专项 法治 直接 生态建设 政策措施 减免 煤矿安全 许可法 十一五 服务体系 2006 标准 医疗 救助 国债资金 小康社会 知识产权 个省 公正 环保 用地 超收 稳步 减排 优化结构 节能降耗 污染 保护环境 集约 高于 四要 三要 土地 淘汰 房地产 政策性 违法 最低工资 农村金融 高污染 高耗能 产能 保险 五是 500 2007 更多地 新上 民生 养老保险 价格上涨 公共服务 家庭 成果 和谐 累计 市场准入 应对 两岸 重建 一是 平稳 中小企业 扶持 灾区 全面实施 灾后 参保 来自 挑战 同胞 生态 医药卫生 新型农村 出台 气候变化 外交 公益性 创业 中非 保障性 三网 专项资金 互利 财政支出 城镇居民 优先 十二五 城镇化 提升 2011 低收入 转移 覆盖 有序 4% 安居工程 小型 债务 微型 学前教育 增值税 大病 中小学 医保 营业税 人民币 融合 互联网 风险 2012 10 新农 改征 适度 结构性 扶贫开发 货币政策 公平 食品药品 居民消费 长远 冲击 经费支出 明显增强 坚实基础 诚挚 左右 万套 新型 贫困地区 2014 习近平 稳中 7.5% 构建 资本 经济带 领导人 协同 公开 简政放权 下放 打造 600 自贸区 化解 小微 海洋 定向 拓展 示范区 核准 新兴产业 大幅 区间 修订 谈判 清单 支付 危房改造 启动 大国 管理制度 低保 融资 动能 脱贫 供给 绿色 2020 棚户区 市场化 网络 高校 6.5% 自贸 80% 涉企 收费 补短 核心 双创 实干 减税 引领 督查 扎实 试验区 降费 问责 实体 文明 行动 精准 取消 转型
from collections import defaultdict

data = defaultdict(dict)
years = [int(i[:4]) for i in reports]
for i in wordset:
    for year in years:
        data[i][year] = 0 
for txt in reports:
    year = int(txt[:4])
    top1000= jieba.analyse.textrank(txt, topK=1000, withWeight=True)
    for ww in top1000:
        word, weight = ww
        if word in wordset:
            data[word][year]+= weight
word_weight = []
for i in data:
    word_weight.append([i, np.sum(list(data[i].values()))])
word_weight.sort(key= lambda x:x[1], reverse = True )
top50 = [i[0] for i in word_weight[:50]]
' '.join(top50) 
'发展 建设 经济 加强 企业 工作 改革 国家 人民 继续 社会主义 提高 社会 生产 农业 政府 制度 增加 推进 问题 促进 增长 加快 农村 方面 管理 进行 重点 坚持 全国 教育 市场 投资 完善 地区 工业 支持 政策 中国 实行 计划 文化 生活 扩大 实现 基本 改善 建立 群众 技术'
def plotEvolution(word, color, linestyle, marker):
    cx = data[word]
    plt.plot(list(cx.keys()), list(cx.values()), color = color, 
             linestyle=linestyle, marker=marker, label= word)
    plt.legend(loc=2,fontsize=8)
    plt.ylabel(u'词语重要性')
plotEvolution(u'民主', 'g', '-', '>')
plotEvolution(u'法制', 'b', '-', 's')
_images/10-text-minning-gov-report_90_0.png
plotEvolution(u'动能', 'b', '-', 's')
plotEvolution(u'互联网', 'g', '-', '>')
_images/10-text-minning-gov-report_91_0.png
plotEvolution(u'工业', 'y', '-', '<')
plotEvolution(u'农业', 'r', '-', 'o')
plotEvolution(u'制造业', 'b', '-', 's')
plotEvolution(u'服务业', 'g', '-', '>')
_images/10-text-minning-gov-report_92_0.png
plotEvolution(u'教育', 'r', '-', 'o')
plotEvolution(u'社会保障', 'b', '-', 's')
plotEvolution(u'医疗', 'g', '-', '>')
_images/10-text-minning-gov-report_93_0.png
plotEvolution(u'环境', 'b', '-', 's')
plotEvolution(u'住房', 'purple', '-', 'o')
_images/10-text-minning-gov-report_94_0.png
plotEvolution(u'发展', 'y', '-', '<')
plotEvolution(u'经济', 'r', '-', 'o')
plotEvolution(u'改革', 'b', '-', 's')
plotEvolution(u'创新', 'g', '-', '>')
_images/10-text-minning-gov-report_95_0.png
plotEvolution(u'社会主义', 'r', '-', 'o')
plotEvolution(u'马克思主义', 'b', '-', 's')
_images/10-text-minning-gov-report_96_0.png

image.png