关于词云:是由词汇组成的彩色图形
示例:应用词云生成词云图
import re
import jieba
from PIL import Image
from wordcloud import wordcloud
import numpy as np
# text = "马云曾公开表态称对钱没兴趣称其从来没碰过钱上了微博热搜"
# 实现处理英文的词云比较简单
# 1. 切割和处理英文字符,
data = []
with open('/tmp/passwd') as f:
for line in f:
result1 = re.split(r'\s|:|/', line)
# 如果item存在数据并且不是空格或者数字, 则继续进行处理;
result2 = [item for item in result1 if not re.findall(r'\s+|\d+', item) and item]
# print(result2)
data.extend(result2)
# 2). 打开图片, 获取图片的数据信息;
imgObj = Image.open('./doc/wordcloud.jpg')
img_mask = np.array(imgObj)
# print(img_mask)
#
# 3). 创建词云对象, 设置属性
wcObj = wordcloud.WordCloud(
mask = img_mask,
background_color="snow",
min_font_size=5,
max_font_size=50,
width=1000,
height=1000,
)
# 4). 生成图片;
# 词云绘制时, 默认之处理字符串类型, 怎么分隔每个单词? 必须以逗号分隔符分割
wcObj.generate(",".join(data))
wcObj.to_file('doc/wcObj.png')
通过词云进行中文分析
import jieba
from PIL import Image
from wordcloud import wordcloud
import numpy as np
def gen_wordcloud(text, filename):
# 1). 强调分割中有问题的词;
jieba.suggest_freq(('微博'), True)
jieba.suggest_freq(('热搜'), True)
jieba.suggest_freq(('碰过钱'), True)
# 2). 难点: 如何切割中文, jieba, lcut
result = jieba.lcut(text) #将文本中的句子拆分成列表的形式保存起来
print(result)
# 绘制词云
# 3). 打开图片, 获取图片的数据信息;
imgObj = Image.open('./doc/wordcloud.jpg')
img_mask = np.array(imgObj)
# print(img_mask)
# 4). 创建词云对象, 设置属性
wcObj = wordcloud.WordCloud(
mask = img_mask, # 数据如何填充到图片
background_color="snow", # 背景颜色
font_path="/usr/share/fonts/cjkuni-ukai/ukai.ttc", # 如果是中文, 指定字体库(fc-list :lang=zh)
min_font_size=5, # 图片中最小的字体大小
max_font_size=50, # 图片中最大的字体大小
width=1000, # 图片宽度
height=1000, # 高
)
# 5). 生成图片;
# 词云绘制时, 默认之处理字符串类型, 怎么分隔每个单词? 必须以逗号分隔符分割
wcObj.generate(",".join(result))
wcObj.to_file(filename)
if __name__ == '__main__':
text = "马云曾公开表态称对钱没兴趣称其从来没碰过钱上了微博热搜"
filename = 'doc/wcObj.png'
gen_wordcloud(text, filename)