python数据挖掘之中文分词和可视化展示(NLP应用初探)

主要应用场景:快速提取用户评论中关注的焦点,直接反应品牌或产品的主观感受,方便市场、运营、产品等相关人员收集市场信息,有针对性的调整或优化产品、策略等。

比如本次练习用到的数据是抓的淘宝一个爆款面膜的部分评论,一眼就能看出消费者关心的是啥,可以直接拖到文末看效果图,是不是很神奇?

本文用到两个第三方库,jieba、wordcloud、numpy,推荐pip方式安装(如命令行下:pip install jieba)。

这里的PIL库单独安装会出问题,传说PIL不支持python3了,网上又说出了个增强版pillow,直接安装依然不行,后来发现PIL已经存在了,不知道啥时候装的,怀疑装wxpython的时候装的。。。。持续怀疑中

import jieba
from wordcloud import WordCloud
from PIL import Image
import numpy as np
# 分别导入模块,注意大小写


wt = jieba.cut(open('data/tb0507mm.txt','r',encoding='utf-8').read(), cut_all=False)
# jieba分词,采取的模式是精准模式,True是全模式

这个地方总是会忘记read(),打开文件之后要读取出来!!!注意编码格式

wt = '/'.join(wt)

中文词意的多样性和复杂性导致我们提取出来的词不一定都是我们想要的,所以需要过滤,这里我们引入一个停词库来过滤掉一些不重要的词,类似“的、了、吗、吧、呢、啊、呀。。。。”这种无意义的词。先把停词库里的词装进列表,作为的参数丢到WordCloud里去。

with open('public/sps.txt','r',encoding='utf-8') as f:
    stopwords = []
    for i in f:
        stopwords.append(i.strip())
        
# print(stopwords[100:105]) 测试下看读的对不对
stopwords.append('面膜')
# 针对性的增加停词

mask_bg = np.array(Image.open('data/bg_mm.jpg'))
# 把图片转换成多维数组,主要用来自定义生成的词云形状,
# 另外图片还是有点要求的,白底,形状内填充部分为黑色

wd = WordCloud(width=800,
               height=600,
               background_color='white',
               font_path='data/simhei.ttf',
               stopwords=stopwords,
               collocations=False,
               mask=mask_bg,
               random_state=30).generate(wt)

解释下WordCloud中的常用参数: 长宽和背景色就不解释了 font_path:这个是指定字体路径,wordcloud对中文支持完全是个垮的,如果输出的是英文,这个参数可以忽略,中文的话,最好加上去;
stopwords:停词库,参数类型为列表,会将存储在列表中的词过滤掉,可省略;
collocations:是一个布尔类型,统计搭配词,默认True,但是在True的时候会出现个问题,就是词云中会出现重复的词,所以这里就False了,可省略;
mask: 一个遮罩,可以自定义词云形状,传入的是一个多维数组,一般会用PIL模块中的image读取,之后用numpy的array()来转换,看上面例子,可省略;
random_state:随机展示,图形内颜色之类的,配色方案,可省略。

wd.to_file('data/tb0507.png')
# 生成词云图片

稍微扩展下,jieba支持自定义词库,先不要管jieba的分词原理,总之jieba目录下有个dict.txt的词库,打开看了就知道词库的结构是 【词 词频 词性】,所以可以直接在这个词库里面追加自定义的词,比如【不明觉厉 3 n】,保存后重新加载一下jieba。当然这个方法有点那个什么,所以还有个正常点的挂载自定义词库的法子:

jieba.load_userdict('textfilename.txt')

load_userdict()方法挂载自定义词库,据说数据量大的时候会很慢,解决方案是追加到jieba自己的词库文件里面去,很粗暴,但有效,也是没试过,以后有机会再说。

展示下效果(看我自己画的一个面膜,O(∩_∩)O):


自定义图云形状

你可能感兴趣的:(python数据挖掘之中文分词和可视化展示(NLP应用初探))