title: python词云剔除非有效词
excerpt: python爬虫小作业2.0
tags: [python, 词云, 爬虫]
categories:
- [学习, python]
index_img: https://picture-store-repository.oss-cn-hangzhou.aliyuncs.com/PicGo/20201123212010.png
banner_img: https://api.ixiaowai.cn/mcapi/mcapi.php
date: 2020-07-20 11:11:11
comment: true
一、Why!
之前做了基于python的青少年沉迷网络调查报告,最后用的是jieba分词和wordcloud进行可视化分析,但是结果图由于爬取的内容不精确,有一些不相关词也被放入可视化中,所以此次想把那个内容再重新可视化词云分析,剔除参杂其中的无用词!
二、What!
原源码如下:
# 导入词云制作库wordcloud和中文分词库jieba
import jieba
import wordcloud
# 导入imageio库中的imread函数,并用这个函数读取本地图片,作为词云形状图片
import imageio
mk = imageio.imread("未标题-1.png")
# 构建并配置词云对象w,注意要加scale参数,提高清晰度
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
font_path='msyh.ttc',
mask=mk,
scale=15)
# 对来自外部文件的文本进行中文分词,得到string
f = open('提取到的第五列数据.txt',encoding='utf-8')
txt = f.read()
txtlist = jieba.lcut(txt)
string = " ".join(txtlist)
# 将string变量传入w的generate()方法,给词云输入文字
w.generate(string)
# 将词云图片导出到当前文件夹
w.to_file('青少年沉迷网络01.png')
对上方源码分析得17-21行为数据读取分词操作
具体步骤如下:
18行:以utf-8读取文件
19行:将读取的内容赋值给txt
20行:利用jieba库进行分词,以列表形式存储
21行:以空格连接列表内的每一个元素
所以可以在第20-21行之间添加一个方法进行剔除
## 三、How!
test.py
```python
import jieba
list=[]
txt="我们总是在意别人的言论,不敢做自己喜欢的事情,害怕淹没在飞短流长之中。其实没有人真的在乎你在想什么,不要过高估量自己在他人心目中的地位。被别人议论甚至误解都没啥,谁人不被别人说,谁人背后不说人,你生活在别人的眼神里,就迷失在自己的心路上。人和人之间就是一份情,一份缘,你珍惜我,我会加倍奉还,你不在意我,就让一切归零!"
txtlist = jieba.lcut(txt)
print(txtlist)
words=["你","人","我",",","。","的",","]
for word in txtlist:
if word in words:
continue
else:
list.append(word)
print(list)
string = " ".join(list)
print(string)
```
结果如下:
```python
>>> ========= RESTART: D:\桌面\Python\拓展\weiboSpider-master\关键词爬取\剔除词test.py =========
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\Bai\AppData\Local\Temp\jieba.cache
Loading model cost 0.594 seconds.
Prefix dict has been built successfully.
['我们', '总是', '在意', '别人', '的', '言论', ',', '不敢', '做', '自己', '喜欢', '的', '事情', ',', '害怕', '淹没', '在', '飞短流长', '之中', '。', '其实', '没有', '人', '真的', '在乎', '你', '在', '想', '什么', ',', '不要', '过高', '估量', '自己', '在', '他人', '心目', '中', '的', '地位', '。', '被', '别人', '议论', '甚至', '误解', '都', '没', '啥', ',', '谁', '人', '不', '被', '别人', '说', ',', '谁', '人', '背后', '不', '说', '人', ',', '你', '生活', '在', '别人', '的', '眼神', '里', ',', '就', '迷失', '在', '自己', '的', '心', '路上', '。', '人', '和', '人', '之间', '就是', '一份', '情', ',', '一份', '缘', ',', '你', '珍惜', '我', ',', '我会', '加倍', '奉还', ',', '你', '不在意', '我', ',', '就让', '一切', '归零', '!']
['我们', '总是', '在意', '别人', '言论', '不敢', '做', '自己', '喜欢', '事情', '害怕', '淹没', '在', '飞短流长', '之中', '其实', '没有', '真的', '在乎', '在', '想', '什么', '不要', '过高', '估量', '自己', '在', '他人', '心目', '中', '地位', '被', '别人', '议论', '甚至', '误解', '都', '没', '啥', '谁', '不', '被', '别人', '说', '谁', '背后', '不', '说', '生活', '在', '别人', '眼神', '里', '就', '迷失', '在', '自己', '心', '路上', '和', '之间', '就是', '一份', '情', '一份', '缘', '珍惜', '我会', '加倍', '奉还', '不在意', '就让', '一切', '归零', '!']
我们 总是 在意 别人 言论 不敢 做 自己 喜欢 事情 害怕 淹没 在 飞短流长 之中 其实 没有 真的 在乎 在 想 什么 不要 过高 估量 自己 在 他人 心目 中 地位 被 别人 议论 甚至 误解 都 没 啥 谁 不 被 别人 说 谁 背后 不 说 生活 在 别人 眼神 里 就 迷失 在 自己 心 路上 和 之间 就是 一份 情 一份 缘 珍惜 我会 加倍 奉还 不在意 就让 一切 归零 !
```
## 四、result!
源码如下:
```python
# 导入词云制作库wordcloud和中文分词库jieba
import jieba
import wordcloud
# 导入imageio库中的imread函数,并用这个函数读取本地图片,作为词云形状图片
import imageio
mk = imageio.imread("未标题-1.png")
list=[]
# 构建并配置词云对象w,注意要加stopwords集合参数,将不想展示在词云中的词放在stopwords集合里,这里去掉“曹操”和“孔明”两个词
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
font_path='msyh.ttc',
mask=mk,
scale=5,
#contour_width=1,
#contour_color="black"
)
# 对来自外部文件的文本进行中文分词,得到string
f = open('提取到的第五列数据.txt',encoding='utf-8')
txt = f.read()
txtlist = jieba.lcut(txt)
words=["收起","全文","所以","多少","路过",",",",",".","。","[","]","【","】"]
for word in txtlist:
if word in words:
continue
else:
list.append(word)
print(list)
string = " ".join(list)
# 将string变量传入w的generate()方法,给词云输入文字
w.generate(string)
# 将词云图片导出到当前文件夹
w.to_file('不信你不出来.png')
print("finish")
```
结果对比:
很容易看出:收起全文没了
![](https://picture-store-repository.oss-cn-hangzhou.aliyuncs.com/PicGo/20201123205628.png)
![](https://picture-store-repository.oss-cn-hangzhou.aliyuncs.com/PicGo/20201123212010.png)