我们在分析英文文本的时候,可以直接统计词频,是因为英文中每个单词都是天然用空格分开的。而在汉语文本中,词和词都是连接在一起的,所以我们需要先对汉语语句进行分词处理,然后再进行词频统计。
我们以汽车广告数据集为例,来进行汉语词云的绘制。主要步骤与英文词云绘制是一致的,但增加了分词和去停用词等步骤。
停用词:一些出现频率很高,但对文章表达的主旨没有影响的词语,如,我们,你们,今天,但是,这里......
汽车广告数据集链接:
链接: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
")
网友评论