欢迎加入我们卧虎藏龙的python讨论qq群:729683466
●导 语 ●
上一次爬取了《鹿鼎记》
做完之后
还想在这个基础上做点什么
想来想去
发现可以做一个词云
于是就有了今天这一期
代码及相关资源获取
1:关注“python趣味爱好者”公众号,回复“ 词云”获取源代码。
效果演示
这是用一匹小马作为背景的效果图,其中出现频率最高的是韦小宝,然后是小郡主,太后,刺客之类的,其实熟悉鹿鼎记的朋友,看了这个图就知道是哪一节。


往期精选
????
开发工具
python3.6.4,第三方库:matplotlib,jieba,wordcloud,cv2
讲解部分
一:前期准备
词云是对文本进行关键词提取,然后将这些关键词作为标签进行可视化的一种技术。在写词云的python程序前,首先要进行一些准备,第一是找到一个分词的txt文本,这个文本里面主要就是一些“分词”或者符号。

还要准备一个图片作为背景,这里我们选择的是《疯狂动物城》里面的卡通形象尼克,也可以选择其他的,比如一个卡通的马,但是选择的图片最好是经过抠图处理的。否则词云会在整个图片上全部显示出来。

还要准备一个字体的tff文件,用于在词云图片中显示文件。
另外就是准备一些第三方库。制作词云需要几个比较重要的模块,第一是matplotlib模块,作用是画图。还有一个jieba模块,作用是对文本进行分词处理,cv2模块可以读取词云的背景图片。当然,也可以用PIL,scipy等第三方库读取图片,还有一个最重要的模块,就是WordCloud,其中有两个函数,第一是WordCloud,另一个是ImageColorGenerator。前者可以用于生成词云,后者用于生成词云的颜色。
二:代码逻辑
首先需要读取背景图片,我们用的背景图片是《疯狂动物城》里面的尼克,可以用imread读取,然后设置词云的属性,这里直接调用函数WordCloud,首先设置字体的路径,当前我们用到的字体是“msyh.ttf”。
back_coloring = imread("huli.jpeg")# 设置背景图片
# 设置词云属性
wc = WordCloud(font_path='msyh.ttf', background_color="white", max_words=1300, mask=back_coloring,
max_font_size=100,random_state=42,width=1400, height=860, margin=2,)
词云背景颜色设计成白色,词语的数量设置成1300,之后就是设置字号,长宽之类的。
随后,调用jieba模块对文本进行分词处理将这个分词的代码打包成一个get1函数,然后调用。
def get1(list):
for items in list:
jieba.add_word(items)
get1(my_words_list)
之后是读取文本,我们选取的是《鹿鼎记》,但是鹿鼎记文字太多了,处理起来肯定是非常耗时间。于是我们只选择了鹿鼎记的《第十一回 春辞小院离离影 夜受轻衫漠漠香》(就是沐剑屏和韦小宝在皇宫那一节)。打开这个文本的方式也很简单,就是用open打开,打开的文本编码格式是“utf-8”。
然后定义一个change函数。
def change(text):
mywordlist = []
seg_list = jieba.cut(text, cut_all=False)
liststr="/ ".join(seg_list)
f_stop = open('stop_word.txt',encoding='utf-8')
try:
f_stop_text = f_stop.read()
f_stop_text = str(f_stop_text)
finally:
f_stop.close( )
f_stop_seg_list=f_stop_text.split('\n')
for myword in liststr.split('/'):
if not(myword.strip() in f_stop_seg_list) and len(myword.strip())>1:
mywordlist.append(myword)
return ''.join(mywordlist)
在其中先设置一个mywordlist空列表,然后用jieba切割这个原始的文本,然后打开stop_word.txt,编码格式也是utf-8。之后用一个if条件判断,判断当前这个词语是不是在分词里面,如果不在分词里面,就添加到列表中。这个文本中存储的就是常见的分词的符号或者名词介词等,用这些词语可以对原始文本进行分割,最后利用生成的词云,产生相关的文本,然后生成相关的颜色,最后将这些文本显示出来。
text = change(text)
wc.generate(text)
image_colors = ImageColorGenerator(back_coloring)
plt.figure()
plt.imshow(wc)
三:完整代码:
import matplotlib.pyplot as plt
import jieba
from os import path
from wordcloud import WordCloud, ImageColorGenerator
from cv2 import imread
back_coloring = imread("huli.jpeg")# 设置背景图片
# 设置词云属性
wc = WordCloud(font_path='msyh.ttf', background_color="white", max_words=1300, mask=back_coloring,
max_font_size=100,random_state=42,width=1400, height=860, margin=2,)
# 添加自己的词库分词
my_words_list = ['材料']
def get1(list):
for items in list:
jieba.add_word(items)
get1(my_words_list)
text = open('第十一回.txt',encoding='utf-8').read()
def change(text):
mywordlist = []
seg_list = jieba.cut(text, cut_all=False)
liststr="/ ".join(seg_list)
f_stop = open('stop_word.txt',encoding='utf-8')
try:
f_stop_text = f_stop.read()
f_stop_text = str(f_stop_text)
finally:
f_stop.close( )
f_stop_seg_list=f_stop_text.split('\n')
for myword in liststr.split('/'):
if not(myword.strip() in f_stop_seg_list) and len(myword.strip())>1:
mywordlist.append(myword)
return ''.join(mywordlist)
text = change(text)
wc.generate(text)
image_colors = ImageColorGenerator(back_coloring)
plt.figure()
plt.imshow(wc)
plt.axis("off")
plt.show()
作者|齐
编辑|齐
感谢大家观看
有钱的老板可打赏一下小编哦
扫描二维码
关注我们
QQ群:729683466
◰
参考来源
背景图片:百度图片
976

被折叠的 条评论
为什么被折叠?



