汉语文本词云绘制

2020-04-24  本文已影响0人  taon

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

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

汽车广告数据集链接:
链接: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
")

上一篇下一篇

猜你喜欢

热点阅读