学会词云图的制作方法,要求熟悉jieba分词库的使用,会使用word cloud绘图,以及了解.generate()和.fit_words()方法的区别。
“词云”是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本,就可以领略文本的主旨。
词云是将感兴趣的词语放在一副图像中,可以控制词云的位置、大小、字体等。通常使用字体的大小来反映词语出现的频率。出现的频率越高,在词云中词的字体越大。
首先做如下数据准备工作:
①以百度上抓取的帖子标题文本作为制作词云的数据。
文本挖掘的第一步就是将文本分词,对于中文,这里使用jieba分词。
接下来构建词云,这里使用工具wordcloud。
#使用pandas进行词频统计
word_list=['july','可爱','傻fufu','聪明','好可爱','精致','猪猪女孩','猪猪女孩','聪明','聪明']
df=pd.DataFrame(word_list,columns=['word'])
result=df.groupby(['word']).size()
freqlist=result.sort_values(ascending=False)
freqlist[:30]
>>word
聪明 3
猪猪女孩 2
精致 1
好可爱 1
可爱 1
傻fufu 1
july 1
dtype: int64
#使用NLTK进行词频统计
import nltk
word_list=['july','可爱','傻fufu','聪明','好可爱','精致','猪猪女孩','猪猪女孩','聪明','聪明']
fdlist=nltk.FreqDist(word_list)
print("聪明的词频:",fdlist['聪明'])#查看某个词的频数
print("词条列表:",fdlist.keys())#列出词条列表
print("前五个高频词及其频次为:",fdlist.most_common(5))#输出前五个高频词及其频次
fdlist#输出全部词频统计结果
#fdlist.tabulate(5)#输出前五个高频词,以列表形式输出
>>聪明的词频: 3
词条列表: dict_keys(['july', '可爱', '傻fufu', '聪明', '好可爱', '精致', '猪猪女孩'])
前五个高频词及其频次为: [('聪明', 3), ('猪猪女孩', 2), ('july', 1), ('可爱', 1), ('傻fufu', 1)]
FreqDist({'聪明': 3, '猪猪女孩': 2, 'july': 1, '可爱': 1, '傻fufu': 1, '好可爱': 1, '精致': 1})
import wordcloud
font='C:/Windows/Fonts/simhei.ttf'#默认不支持中文,这里要从自己电脑上找到喜欢的字体
text='july,可爱,傻fufu,聪明,好可爱,精致,猪猪女孩'
mycloud=wordcloud.WordCloud(font_path=font).generate(text)
print(mycloud)
>>
#更改参数
mycloud=wordcloud.WordCloud(font_path=font,width=150,height=150,mode='RGBA',background_color=None).generate(text)
plt.imshow(mycloud)
plt.axis("off")#隐藏坐标轴
plt.show()
mycloud.to_file("猪猪词云.png")
本次实验通过matplotlib,jieba,worldcloud等库文件实现数据到图标的直接转化,转换过程中我人为首先需要注意的是对源数据的处理,在最开始的的时候,使用了上次爬虫爬取贴吧的数据生成词云后,一些固定格式的信息占据了较大位置,例如贴子标题,贴子作者等。后对源数据经行了一定的修改,成功使用词云获得了标题里重复度较高的词语。
在使用轮廓图绘制时,尝试过在网络上寻找一些图片,但效果都不是很明显,我推测时对应的库对于图片中主体物品的轮廓提取还是存在的偏差,最后使用了一张白底,主题人物和背景差别较大的图片完成了实验。