美文网首页
汉语文本词云绘制

汉语文本词云绘制

作者: taon | 来源:发表于2020-04-24 19:10 被阅读0次

    我们在分析英文文本的时候,可以直接统计词频,是因为英文中每个单词都是天然用空格分开的。而在汉语文本中,词和词都是连接在一起的,所以我们需要先对汉语语句进行分词处理,然后再进行词频统计。

    我们以汽车广告数据集为例,来进行汉语词云的绘制。主要步骤与英文词云绘制是一致的,但增加了分词和去停用词等步骤。
    停用词:一些出现频率很高,但对文章表达的主旨没有影响的词语,如,我们,你们,今天,但是,这里......

    汽车广告数据集链接:
    链接:https://pan.baidu.com/s/1IMR3wGddfirxA3NdaKHfog
    提取码:2pah
    停用词表链接:
    链接:https://pan.baidu.com/s/1QjZgm5pRY-xIWd9j4pgQUA
    提取码:c4xo

    下面进行代码演示:

    #导入数据分析的常用工具包
    import numpy as np
    import pandas as pd
    #jieba是非常常用的非此工具包
    import jieba
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud,STOPWORDS
    %matplotlib inline
    
    #导入数据集
    df = pd.read_csv('D:\\Py_dataset\\val.txt',sep = '\t',
    names = ['Category','Theme','URL','Content'],encoding = 'utf-8')
    df.head() #前五行数据参考下面的图片
    
    #查看第1001行的数据
    df['Content'][1000]
    [out]:
    '阿里巴巴集团昨日宣布,将在集团管理层面设立首席数据官岗位(Chief\u3000Data\u3000Officer),
    阿里巴巴B2B公司CEO陆兆禧将会出任上述职务,
    向集团CEO马云直接汇报。>菹ぃ和6月初的首席风险官职务任命相同,
    首席数据官亦为阿里巴巴集团在完成与雅虎股权谈判,
    推进“one\u3000company”目标后,在集团决策层面新增的管理岗位。
    0⒗锛团昨日表示,“变成一家真正意义上的数据公司”已是战略共识。记者刘夏'
    
    #将pd.series格式的文本内容转化为list格式
    contents = df['Content'].values.tolist()
    
    #对该汉语文本数据做分词处理
    contents_s = []
    for line in contents:
        line_c = jieba.lcut(line)
        if len(line_c) >1 and line_c != '\r\n':
            contents_s.append(line_c)
    
    #第二步,对中文文本做去停用词处理
    #停用词表有很多,此处我们使用的是网络上下载的一个停用词表
    stopwords = pd.read_csv('D:\\Py_dataset\\stopwords.txt',index_col = False,
    sep = '\t',names = ['Stopwords'],quoting = 3,encoding = 'utf-8')
    
    #创建去停用词的函数
    def drop_stopwords(contents,stopwords):
        contents_clean = []
        all_words = []
        for line in contents:
            line_clean = []
            for word in line:
                if word in stopwords:
                    continue
                line_clean.append(word)
                all_words.append(word)
            contents_clean.append(line_clean)
        return(contents_clean,all_words)
    
    #将DataFrame格式的stopwords转化list格式
    stopwords_list = stopwords['Stopwords'].values.tolist()
    #对我们的文本做去停用词处理
    contents_clean,all_words = drop_stopwords(contents_s,stopwords_list)
    #观察分词,去停用词后的一句话
    print(contents_clean[1000])
    [out]:
    ['阿里巴巴', '集团', '昨日', '集团', '管理', '层面', '设立', '首席', '数据', '官', '岗位', 'C', 'h', 
    'i', 'e', 'f', 'D', 'a', 't', 'a', 'O', 'f', 'f', 'i', 'c', 'e', 'r', '阿里巴巴', 'B', 
    'B', '公司', 'C', 'E', 'O', '陆兆禧', '出任', '职务', '集团', 'C', 'E', 'O', '马云', '汇报', '菹',
     'ぃ', '月初', '首席', '风险', '官', '职务', '任命', '首席', '数据', '官亦为', '阿里巴巴', 
    '集团', '雅虎', '股权', '谈判', '推进', 'o', 'n', 'e', 'c', 'o', 'm', 'p', 'a', 'n', 'y', 
    '目标', '集团', '决策', '层面', '新增', '管理', '岗位', '⒗', '锛', '团', '昨日', '一家',
     '意义', '数据', '公司', '战略', '共识', '刘夏']
    
    #对处理之后的文本进行词频统计
    words = pd.DataFrame(all_words,columns = ['Words'])
    words_count = words['Words'].value_counts()
    words = pd.DataFrame(words_count).reset_index()
    words = words.rename(columns = {'index':'key words','Words':'count'})
    
    #绘制汉语词云
    text = words['key words'].values.tolist()
    #设置词云的样式
    wordcloud = WordCloud(background_color = 'white',
                          stopwords = set('STOPWORDS'),
                         #必须要导入字体,否则无法显示汉字
                         font_path = 'D:\\Py_dataset\\simhei.ttf',
                         max_words = 100,
                         max_font_size = 100,
                         relative_scaling = 1,
                          height = 300,
                          width = 400,
                         random_state = 1)
    
    wordcloud.generate(str(text))
    plt.figure(figsize = (10,8))
    plt.axis('off')
    plt.imshow(wordcloud)
    
    val dataset.png 汉语词云: Chinese.png

    汉语词云绘制小结
    1.使用Jieba分词器,对汉语语句进行切分。
    2.对切分好的语句进行去停用词处理。
    3.使用WordCloud库绘制词云。
    4.字体需要我们自己在网上下载一些ttf格式的字体,然后导入进来。
    推荐[字体天下]("http://www.fonts.net.cn/fonts-zh-1.html
    ")

    相关文章

      网友评论

          本文标题:汉语文本词云绘制

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