Python学习之jieba、wordcloud

在上一篇的博客中,获取到了大量的淘宝MM的数据,这里我们使用这些数据来生成一个类似如下的图片


在这里我们要用到结巴分词、词云WordCloud和会图库matplotlib。直接上代码

# coding:utf-8
from os import path
from scipy.misc import imread
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

stopwords = {}


def importStopword(filename=''):
    global stopwords
    f = open(filename, 'r', encoding='utf-8')
    line = f.readline().rstrip()

    while line:
        stopwords.setdefault(line, 0)
        stopwords[line] = 1
        line = f.readline().rstrip()
    f.close()


def processChinese(textContent):
    jieba.enable_parallel(4)
    seg_generator = jieba.cut(textContent)  # 使用结巴分词,也可以不使用
    seg_list = [i for i in seg_generator if i not in stopwords]
    seg_list = [i for i in seg_list if i != u' ']
    seg_list = r' '.join(seg_list)
    return seg_list


importStopword(filename='./stopwords1.txt')

# 获取当前文件路径
# __file__ 为当前文件, 在ide中运行此行会报错,可改为
# d = path.dirname('.')
d = path.dirname(__file__)

text = open(path.join(d, 'data.txt'), encoding='utf-8').read()

# 如果是中文
text = processChinese(text)  # 中文不好分词,使用Jieba分词进行

# 设置背景图片
back_coloring = imread(path.join(d, "./image/nv.png"))

wc = WordCloud(font_path='./font/叶立群几何体.ttf',  # 设置字体
               background_color="white",  # 背景颜色
               max_words=2000,  # 词云显示的最大词数
               mask=back_coloring,  # 设置背景图片
               # max_font_size=100, #字体最大值
               random_state=42,
               )
# 生成词云, 可以用generate输入全部文本(中文不好分词),也可以我们计算好词频后使用generate_from_frequencies函数
wc.generate(text)
# wc.generate_from_frequencies(txt_freq)
# txt_freq例子为[('词a', 100),('词b', 90),('词c', 80)]
# 从背景图片生成颜色值
image_colors = ImageColorGenerator(back_coloring)
# 绘制词云
plt.figure()
# 以下代码显示图片
plt.imshow(wc)
plt.axis("off")
plt.show()

# 保存图片
wc.to_file(path.join(d, "名称.png"))


stopwords1.txt 内容就是要过滤掉的不要的信息

name
order
age
place
birthday
style
size
place
fans
flow
active
profession
blood_type
school
&
nbsp
公历
blood
type
name

背景图使用如下的:(要使用边界分明的图片,不然容易生成方形的图片)




程序生成如下的图片 




如果对比收集到的数据,这个图是能说明一些问题的,比如我们的数据里有MM的地址、血型、职业、风格等等的一些信息,图片中放大显示的就是我们的数据里占比比较大的数据。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值