是我见识浅薄,这居然是我第一次知道“词云”这个这个概念,虽然之前见过这个,就是一直不知道这个概念!正如作者描述--“不会的时候,感觉很厉害、很高大上,会用了,就会感觉到哪里都看到别人在用”
概念
词云就是一种数据的呈现方式,由词汇组成的类似彩云的图形。
准备工作
(1)需要的python包
wordcloud, (生成词云)matlpotlib,jieba(中文分词)
(2)一些文本素材
先看一个简单的例子
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
# 打开文本
text = open('Harry Potter.txt').read()
mask = np.array(Image.open('蜡笔小新.jpg'))
# 生成对象
wc = WordCloud(font_path='Hiragino Sans GB W3.otf',background_color='white',mask=mask).generate(text)
#显示词云
plt.imshow(wc,interpolation='bilinear')
plt.axis('off')
plt.show()
# 保存文件
wc.to_file('WordCloud.png')
文本使用的Harry Potter.txt,
链接:https://pan.baidu.com/s/1RyjqNDvVV3KQHMQxx6bgGw
提取码:o4fo
mask时使用小新的形象
运行效果如下:
中文的词云
由于英文每个单词是由空格自然分开的,而中文是连续的,所有中文的词云一般需要进行分词处理。先看一下没有进行分词处理的中文词云。
西游记文本资源链接:
链接:https://pan.baidu.com/s/1l_S31WUOL6a5WpfbfEQjyg 提取码:uazm
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
# 打开文本
text = open('xyj.txt',encoding='gb18030').read()
# 生成对象
wc = WordCloud(font_path='Hiragino_Sans_GB_W3.otf').generate(text)
#显示词云
plt.imshow(wc,interpolation='bilinear')
plt.axis('off')
plt.show()
# 保存文件
wc.to_file('WordCloud.png')
运行效果
大家会发现,有一些词是没有意义的,所以需要进行分词处理。
中文分词
下面介绍一下‘结巴’中文分词组件。
‘jieba’中文分词的宗旨是:做最好的Python中文分词组件。
特点:
(1)支持三种分词模式,
- 精确模式,试图将句子最精确地切开,适合文本分析;
- 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
(2)支持繁体分词
(3)支持自定义字典
(4)MIT授权协议
来,上个例子看看吧
import jieba
str = "我来自北京交通大学机械与电子控制工程学院"
# 全模式
seg_list = jieba.cut(str,cut_all=True)
print('Full Mode : ' + ' '.join(seg_list))
# 精确模式
seg_list = jieba.cut(str,cut_all=False)
print('Default Mode: ' + ' '.join(seg_list))
# 精确模式
seg_list = jieba.cut_for_search(str)
print('Search Mode : ' + ' '.join(seg_list))
输出结果
Full Mode : 我 来自 北京 交通 大学 机械 与 电子 控制 控制工程 工程 工程学 工程学院 学院
Default Mode: 我 来自 北京 交通 大学 机械 与 电子 控制 工程学院
Search Mode : 我 来自 北京 交通 大学 机械 与 电子 控制 工程 学院 工程学 工程学院
下面是GitHub主页,对中文分词有兴趣的,可一参考一下。
https://github.com/fxsjy/jieba
使用中文分词后,看看下面的例子
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import jieba
# 打开文本
text = open('xyj.txt',encoding='gb18030').read()
# 中文分词
text = ' '.join(jieba.cut(text))
# 生成对象
wc = WordCloud(font_path='Hiragino_Sans_GB_W3.otf').generate(text)
#显示词云
plt.imshow(wc,interpolation='bilinear')
plt.axis('off')
plt.show()
# 保存文件
wc.to_file('WordCloud.png')
运行结果
这样就没有一些无意义的词了。
使用蒙版
在第一个例子里,就已经使用了,看看那的就行了
WordCloud()
可选的参数
font_path
:可用于指定字体路径,包括otf
和ttf
width
:词云的宽度,默认为400height
:词云的高度,默认为200mask
:蒙版,可用于定制词云的形状min_font_size
:最小字号,默认为4max_font_size
:最大字号,默认为词云的高度max_words
:词的最大数量,默认为200stopwords
:将被忽略的停用词,如果不指定则使用默认的停用词词库background_color
:背景颜色,默认为black
mode
:默认为RGB
模式,如果为RGBA
模式且background_color
设为None
,则背景将透明
有兴趣的继续学习,参考
https://zhuanlan.zhihu.com/p/44165235