背景
近期对于习大大的《中国特色社会主义思想三十讲》的学习如火如荼。书还挺厚的,那么我们用科学的方法来分析一下这本书到底主要说的是什么。
分析
获取原料
首先要获取原材料,也就是《中国特色社会主义思想三十讲》的原文。这个可以在网上下载到。我们将整本书保存为txt格式,并读取进行分析。
1
content = open('./materials/习近平新时代中国特色社会主义思想三十讲.txt','rb').read()
关键词提取
文章关键词提取还是使用的jieba分词这个第三方库,可以直接调用jieba分词的关键词提取函数——
jieba.analyse.extract_tags()
。1
2
3tags = jieba.analyse.extract_tags(content, topK=100, withWeight=True)
for tag in tags:
print("tag: %s\t\t weight: %f" % (tag[0], tag[1]))对于党建方面的文章,普通的分词其实并不是特别适用,我们看下直接输出的话结果是什么:
1
2
3
4
5
6
7
8
9
10tag: 发展 weight: 0.093145
tag: 习近平 weight: 0.082980
tag: 特色 weight: 0.069125
tag: 中国 weight: 0.061122
tag: 建设 weight: 0.051764
tag: 时代 weight: 0.048980
tag: 社会 weight: 0.040907
tag: 总书记 weight: 0.038929
tag: 政治 weight: 0.036789
tag: 思想 weight: 0.035790发现这个词基本上都是名词,而且都不代表什么特殊含义。党建还是有很多专用词汇的,所以需要我们自己添加一些字典库,设置一些停止词。
字典库添加:中国特色社会主义,中国特色社会主义政治、中国特色社会主义思想、新时代等
停止词添加:中国、我国、国家、总书记等。
在分析前配置我们的字典库和停止词:
1
2jieba.load_userdict('myDict/myDict.txt')
jieba.analyse.set_stop_words("myDict/stopwords.txt")再次分析,结果如下:
1
2
3
4
5
6
7
8
9
10tag: 发展 weight: 0.098607
tag: 习近平 weight: 0.087846
tag: 新时代 weight: 0.085403
tag: 中国特色社会主义 weight: 0.078552
tag: 建设 weight: 0.054799
tag: 政治 weight: 0.037376
tag: 推进 weight: 0.035288
tag: 制度 weight: 0.032766
tag: 中华民族 weight: 0.032722
tag: 中国特色社会主义思想 weight: 0.031512这次的结果就相对比较好一点。
绘制词云
最后进行一下可视化,找一个党徽的图,使用wordcloud库进行绘制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21def draw_word_cloud(word_dict):
d = os.path.dirname(__file__)
img = Image.open(os.path.join(d, "./pics/党徽.jpg"))
width = img.width / 80
height = img.height / 80
alice_coloring = np.array(img)
my_wordcloud = WordCloud(background_color="white",
max_words=500, mask=alice_coloring,
max_font_size=200, random_state=42,
font_path=(os.path.join(d, "./font/PingFang.ttc")))
my_wordcloud = my_wordcloud.generate_from_frequencies(word_dict)
image_colors = ImageColorGenerator(alice_coloring)
plt.figure(figsize=(width, height))
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
# 通过设置subplots_adjust来控制画面外边框
plt.subplots_adjust(bottom=.01, top=.99, left=.01, right=.99)
plt.savefig("out.png")
plt.show()需要注意中文字体的设置,以及图片必须为白底才行。
最终结果如下:
扩展
结巴分词的关键词提取
这是基于TFIDF算法,默认返回权重最高的20个词,可以通过参数来设置返回的词的数量和是否输出权重。
关于算法的介绍可参考:https://baike.baidu.com/item/tf-idf/8816134?fr=aladdin
关于分词和词云的绘制,可参考以前写文章使用wordcloud绘制词云