案例实操

准备资源

  1. 导入所需库
    import wordcloud
    import jieba
  2. 准备好源文件,屏蔽词文件,备用字体
    font_path = 'C:\Windows\Fonts\时尚中黑简体.ttf'
    file_path = '新建文本文档.txt'
    fake_path = 'stop_key.txt'
  3. 自定义变量
    alist = []  #
    btext = ''  #
    fake_set = {1}  #第三方屏蔽列集合
    #根据文档特殊性而设计的自定义屏蔽词
    stop_words = {'我们','这个','一个','可以','下来','这样','就是','用来',
                  '非常','然后','这里','非常','大家','时候','上面','里面',
                  '放在','首先','准备','出来','很多','其实','一些','拿出','还有','如果'}

读取数据集

#读入源文档
with open(file_path,'r',encoding='GBK',errors='ignore')as f:
    text = f.read()
    #type(text):str
    #ignore errors

#读入屏蔽词
with open (fake_path,'r',encoding='utf-8')as f:
    fake_data = f.readlines()
    #屏蔽词文件中,每一个词汇独占一行,因此逐行读取
    #type(fake_data) is list. 这个列表里的每个元素都是str

    for i in fake_data:
        #遍历屏蔽词列表,每个i都是一个屏蔽词
        fake_set.add(i.strip())
        #将屏蔽词加入集合,集合具有无序独立性,会自动排除重复词

#扩充屏蔽词库
fake_set = fake_set|stop_words

分词

#alist装填分词句
for i in jieba.cut(text,cut_all=False):
    #text是源文档
    #切分采用精确模式
    #jieba.cut()返回一个generate对象,使用for语句可以遍历此对象
    #每一个i都是一个str
    alist.append(i.strip())
    #循环结束后,alist列表里的若干个元素,都是通过jieba分好的词

# 剔除屏蔽词
for word in alist:
#alist是一个装填分词的列表,里面的每一个元素都来自源文档
    if word not in fake_set:
    #如果遍历到的词汇不是屏蔽词,那么就把这词接入btext
        btext += word
        btext +='/'
        #每个分词之间用/断开
        #btext变量是一个较长的且已过滤屏蔽词的字符串str,每个分词之间由'/'断开

生成词云

# 实例化
wc = wordcloud.WordCloud(font_path=font_path,
                         width=1920,
                         height=1080,
                         background_color="white")
# 传入 str 对象 
# 此处给 generate 传入的参数 btext 已手动除杂,无需在 wordcloud 的实例化参数中指明 stopwords
wc.generate(btext)

file = wc.to_file('11111.jpg')
image = wc.to_image()
image.show()

Demo

手动爬取 15 个沙雕营销号生活妙用视频文案,利用 jieba + wordcloud 统计高频词。

问题总结

文件读写统一编码格式

错误案例:读取多个编码格式不同的文件时,使用了统一的解码格式,导致文本乱码或屏蔽失效。

例如:屏蔽词文件 stop_key.txt 编码为 GBK,源文件 raw_text.txt 编码为 UTF-8。一开始写函数并没有注意到这个细节,而后整个程序的读文件操作都通过一个 read_file() function 进行,导致整个程序陷入了无限报错之中,拆东墙补西墙。

解决方案:给 read_file() function 自定义参数 mode,进而针对特殊编码的文件单独控制 encoding。

  • ps:此处分别用两个 open 强调文件编码不同
  • ps:在我没意识到文件编码异常之前,一直在调整统一的 encoding 试错,从 UTF-8 到 GBK 再到 GB18030,显然都不能解决问题。如果通过设置 errors=ignore 强行忽视非法编码,要么导致源文文本乱码,要么就会在词库过滤时发现 stop_words 集合并没有起作用(原因一致)。由此引发的 Error 信息如下。
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 91: illegal multibyte sequence
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbd in position    0: invalid start byteshell

补充:如果数据集从创建到调用都是自己通过python函数操作,往往不会出现编码格式错乱的问题(无非就 GBK 或 UTF-8 )。出现问题很可能是数据集被创建后自己 手动 打开 修改 保存 了源文档!这时候保存的文档编码格式可能会分裂成 UTF-8,GBK,GB18030,Unicode,ANSI,GB2312,BIG5 等等常见的中文格式编码,这要看编辑器的默认转录格式

wordcloud易错参数解释

  • 参数**stopwords接受的文本格式是set**

  • 函数 **generate接受的文本格式是str**

    # 词云实例化
    wc = wordcloud.WordCloud(stopwords=stop_words)
    print(type(stop_words))
    # <class 'set'>
    
    # 词云生成
    wc.generate(btext)
    print(type(btext))
    # <class 'str'>

实验附件

这里呈上沙雕营销号文案

"""接着利用剪刀剪下来一个正方形纸片。
利用我们的美工刀在上面裁剪一个小孔。
小孔裁剪好了。
大家肯定非常好奇。
这个是用来做什么的?
其实这个就是我们用来阅读的一个小神器。
我们在阅读的时候。
可以将它放在我们的书上。
然后这样逐字阅读。
这个方法就是采用了我们小孔成像的原理。
这样我们阅读的时候就可以方便很多。
而且看得很清楚。
我们可以先把油桶的提手取下来
其实取下提手也是有小方法的
我们只要把这一圈齿片一片一片的往外掰
掰完以后,我们就可以把它取下来了
接下来我们看看它的妙用吧
家里衣服太多衣柜挂不下
我们只需把油桶上的塑料把手清洗干净
然后套在衣架上
这时我们将下一件衣服也挂在上面
这样就能为我们节省很多空间
我们拿出家里的吹风机
开启冷风档
大家看这个时候它散发出来的一股吸附力
能够将我们的一次性纸杯牢牢吸附在它的后盖上
能够轻松地吸附我们桌子上面的一些纸屑
热熔胶热熔胶热熔胶热熔胶热熔胶
然后将刀片黏在梳子上
我们准备一个卫生巾
把它贴在门把手侧面
妙用2用来戒烟
将风油精涂在香烟上 会有一股难闻的气味
吸烟者抽了就会头痛恶心 能达到减肥的效果
第三个妙用 我们可以在上面套一个垃圾袋
要当垃圾桶吗
这样把它放在我们卧室的床头上
在扔垃圾的时候就会变得非常容易了
如果觉得有异味的话
如果觉得有异味的话 我们扔完垃圾后可以盖上盖子

我们先来准备食材:馒头、蜂蜜还有洗洁精
我们拿出馒头在上面 均匀地涂抹一些蜂蜜
然后再加入适量的洗洁精 切记涂抹均匀o
然后我们把它放在老鼠经常出没的地方
老鼠一碰到找个馒头就会轻松挂掉了
原理解释
蜂蜜是甜性物质 涂抹它是为了吸引老鼠过来
而洗洁精本身就是有毒的液体,老鼠一沾到就会自然挂掉

你说涂点老鼠药上去1那我银A可能还能稍微能接受一点
可以我今天颠对洗清精的认识好吧
绝对不会出现老鼠

今天呢城西教大家用现有的材料自制胶水那个效果呢用起来跟买的
效果是擦不多的
首先我们只需要准备一点淀粉
淀粉就是那个玉米定粉啊
这个声音像我小学门口小卖店的老板
接着我们挤入洗洁精
大家看同样是有粘的效果的
希望对大家有所帮助

今天呢城西就跟大家讲一下
我们一定要在我们的钱包里面放一张纸
为什么呢?(为什么这个营销号不上字幕?)
作用可是非常的大啊
首先呢我们要拿出
一张这么大小的纸
裁剪出跟这里差不多大小
然后呢我们要在这个上面写上我们的姓名
姓名然后电话号码
然后呢还有家庭住址之类的
这个纸啊塞在最显眼的地方

把冰淇淋拿出来把肥皂弄成永淇淋装回袋子

另外我们还可以在废旧的鞋子里面
铺上一层锡箔纸
因为锡箔纸不怕烫
我们把它放在床头
就可以成为一个小小的烟灰缸啦
你为什么非要用个高跟鞋去做烟灰缸
实个烟灰缸就这么难吗
还要铺上锡销E
哇失响1你好讲究晚你,意识好强哦
是不是非常方便呢
而且也非常美观 像一件艺术品

火机放在水里以后还能开火吗
打火机大家常见特别的男生
今天我们就来做这实验
首先准畜一个打火机和一个气球
把气球套在打火机上面
然后端口打个死结
接者我们把用气球装好的打火机放进水里
来回浸泡几分钟后拿出来
会发生什么变化呢
我们把气球剪破口 然后把火机拿出来
开火试一下竟然还是能用的
火花比原来的还要大
原来打火机在的密封下浸水
还是可以用的

我们拿手机看电视时
可以将塑料提手向后掰几下
这时再把手机放上去
这样我们手机支架就做好了

我们拿来一个家里面都有的废旧盒子
接着利用剪刀剪下来一个正方形纸片
利用我们的美工刀在上面裁剪一个小孔

这一次性纸杯相信大家都不陌生
很多朋友的家里都会买一些这种纸杯
用它来招待客人
但是你知道
在这些纸杯上面扎一些小洞
他有什么作用吗
下面跟三毛一起来了解一下吧
首先我们准备一个一次性纸杯
还有一个叉子
然后我们用叉子
在这个杯子的底部给他戳一个小洞
将杯子底部扎完小洞之后
然后我们再将这个纸杯
放到另一个杯子里面
接下来我们再到这杯子里面
放入少许的茶叶
添加适量的茶叶之后
我们再倒入适量的开水
添加开水之后我们让它浸泡2-3分钟时间
浸泡2-3分钟时间后我们在将里面的杯子拿出来
我们现在可以看到
杯子里面的茶叶已经全部给过滤出来了
非常的方便
用这个方法来泡茶喝
它还可以节省茶叶
这么一点点茶叶我们可以泡好几杯茶
小妙招

超实用的小妙招
学会了快告诉妈妈
准备一张吸油纸
将牙膏一粒一粒均匀地挤在纸上
然后撒上小苏打
等待凝固后
把它装进小瓶子里
刷牙的时候倒出一粒
就可以直接刷牙了

将香皂融化吸入针管
然后挤入药板模型里面
用锡纸封柱模板
旅游的时候带在身上
随时随地都可以用来洗手

废旧的牙刷还有怎样的妙用呢
跟我来看看
我们先准备两个差不多的牙刷
用皮筋将它们绑起来
那么这两支牙刷的第一个作用就是用来清洗水龙头
由于水龙头的形状比较特殊
所以它的内侧经常很难清理到
将牙刷取开 然后均匀的擦拭
可以看到里外都清理的非常干净
而且可以随时调换位置

喝茶剩下的茶叶根不要扔
我们还可以拿它来做很实用的东西
首先将茶叶取出来 挤干水分放入盘中
然后翻在太阳下晒干
晒好后
将我们穿的袜子脱下来一只
将晒干的茶叶倒入袜子中
扎好口
一个便携的香袋就完成了
茶香四溢
怎么样 是不是很实用呢
如果实用别忘记点赞
"""

转自:Echosec @QIN2DIM

最后修改:2022 年 04 月 12 日
如果觉得我的文章对你有用,请随意赞赏~