美文网首页
Python3 生成中文词云

Python3 生成中文词云

作者: tafanfly | 来源:发表于2019-08-27 17:22 被阅读0次

    前提

    Python 生成中文词云主要用到两个依赖库:

    • jieba:中文分词工具
    • wordcloud:词云生成工具

    简单介绍jieba

    “结巴”中文分词:做最好的 Python 中文分词组件。

    安装: pip install jieba / pip3 install jieba

    支持三种分词模式:

    • 精确模式,试图将句子最精确地切开,适合文本分析
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
    # encoding=utf-8
    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))
    

    输出为

    【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
    【精确模式】: 我/ 来到/ 北京/ 清华大学
    【新词识别】:他, 来到, 了, 网易, 杭研, 大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
    【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

    更多的安装及介绍见官网:https://github.com/fxsjy/jieba


    简单介绍wordcloud

    详见 Python3 生成英文词云


    生成词云

    代码如下, 注意以下几点:

    • cut_the_words() 是利用jieba分词, 入参是中文文本,comments.txt是上海堡垒的一些评论文本
    • create_worlds_cloud() 是生成词云函数, wordcloud的默认字体不支持中文,可以设置支持中文的字体的路径传给font_path。字体要么已经存在于环境变量中,要么指定字体文件的绝对路径。中文的字体库:https://github.com/adobe-fonts
    #!/usr/bin/env python
    # coding=utf-8
    
    
    import os
    import jieba
    import numpy as np
    from PIL import Image
    from wordcloud import WordCloud, STOPWORDS
    
    
    CURDIR = os.path.abspath(os.path.dirname(__file__))
    TEXT = os.path.join(CURDIR,  'comments.txt')
    PICTURE= os.path.join(CURDIR,  'alice.png')
    FONT = os.path.join(CURDIR, 'Songti.ttc')
    
    
    def cut_the_words(test=TEXT):
        with open(test, 'r') as rp:
            content = rp.read()
        words_list = jieba.cut(content, cut_all = True)
        return ' '.join(words_list)
    
    
    def create_worlds_cloud():
        background = np.array(Image.open(PICTURE))
        stopwords = set(STOPWORDS)
        for item in ["上海堡垒", "上海", "堡垒"]:
            stopwords.add(item)
        words = cut_the_words()
        wc = WordCloud(background_color="white",
                       mask=background,
                       stopwords=stopwords,
                       font_path=FONT)
        wc.generate(words)
        wc.to_file('girl.png')
    
    if __name__ == '__main__':
        create_worlds_cloud()
    
    上海堡垒

    相关文章

      网友评论

          本文标题:Python3 生成中文词云

          本文链接:https://www.haomeiwen.com/subject/csisectx.html