科学分析习近平中国特色社会主义思想三十讲主要说什么

背景

近期对于习大大的《中国特色社会主义思想三十讲》的学习如火如荼。书还挺厚的,那么我们用科学的方法来分析一下这本书到底主要说的是什么。

分析

  • 获取原料

    首先要获取原材料,也就是《中国特色社会主义思想三十讲》的原文。这个可以在网上下载到。我们将整本书保存为txt格式,并读取进行分析。

    1
    content = open('./materials/习近平新时代中国特色社会主义思想三十讲.txt','rb').read()
  • 关键词提取

    文章关键词提取还是使用的jieba分词这个第三方库,可以直接调用jieba分词的关键词提取函数——jieba.analyse.extract_tags()

    1
    2
    3
    tags = 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
    10
    tag: 发展		 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
    2
    jieba.load_userdict('myDict/myDict.txt')
    jieba.analyse.set_stop_words("myDict/stopwords.txt")

    再次分析,结果如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tag: 发展		 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
    21
    def 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()

    需要注意中文字体的设置,以及图片必须为白底才行。

    最终结果如下:

    out

扩展

  • 结巴分词的关键词提取

    这是基于TFIDF算法,默认返回权重最高的20个词,可以通过参数来设置返回的词的数量和是否输出权重。

    关于算法的介绍可参考:https://baike.baidu.com/item/tf-idf/8816134?fr=aladdin

  • 关于分词和词云的绘制,可参考以前写文章使用wordcloud绘制词云