词云
内容纲要
wordCloud
用python进行文本分词并生成词云
需要安装的包
- wordcloud包依赖于Pillow,numpy,matplotlib
其他
- 分词采用结巴分词,并支持自定义字典
- 分词结果进行词频统计分析,并导出
- 词云图可自己设定背景图(英文词云图不需先进行分词)
运行结果
运行demo.py,会生成相应的的词云图,和“doc/词频统计.txt”
项目架构

chnSegment
# coding:utf-8
from collections import Counter
from os import path
import jieba
jieba.load_userdict(path.join(path.dirname(__file__), 'userdict//userdict.txt')) # 导入用户自定义词典
def word_segment(text):
"""
通过jieba进行分词并通过空格分隔,返回分词后的结果
"""
# 计算每个词出现的频率,并存入txt文件
jieba_word = jieba.cut(text, cut_all=False) # cut_all是分词模式,True是全模式,False是精准模式,默认False
data = []
for word in jieba_word:
data.append(word)
data_dict = Counter(data)
with open('doc//词频统计.txt', 'w') as fw:
for k, v in data_dict.items():
fw.write("%s,%d\n" % (k, v))
# fw.write("%s"%data_dict)
# 返回分词后的结果
jieba_word = jieba.cut(text, cut_all=False) # cut_all是分词模式,True是全模式,False是精准模式,默认False
seg_list = ' '.join(jieba_word)
return seg_list
plotWordcloud
# coding:utf-8
from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
def generate_wordcloud(text):
"""
输入文本生成词云,如果是中文文本需要先进行分词处理
"""
# 设置显示方式
d = path.dirname(__file__)
# alice_mask = np.array(Image.open(path.join(d, "Images//alice_mask.png")))
# alice_mask = np.array(Image.open(path.join(d, "Images//rm.png")))
# alice_mask = np.array(Image.open(path.join(d, "Images//dollar.png")))
# alice_mask = np.array(Image.open(path.join(d, "Images//chinamap.png")))
alice_mask = np.array(Image.open(path.join(d, "Images//money.png")))
font_path = path.join(d, "font//so.ttf")
stopwords = set(STOPWORDS)
wc = WordCloud(background_color="white", # 设置背景颜色
max_words=2000, # 词云显示的最大词数
# mask=alice_mask, # 设置背景图片
stopwords=stopwords, # 设置停用词
font_path=font_path, # 兼容中文字体,不然中文会显示乱码
max_font_size=100, # 设置字体最大值
random_state=42, # 设置有多少种随机生成状态,既有多少种配色方案
width=1000, height=860, margin=2, # 设置图片默认的大小,但是如果使用背景图片的话,那么保存的图片大小将会按照其大小保存,margin为词语边缘距离
)
# 生成词云
wc.generate(text)
# 生成的词云图像保存到本地
wc.to_file(path.join(d, "Images//1.png.png"))
# 显示图像
plt.imshow(wc, interpolation='bilinear')
# interpolation='bilinear' 表示插值方法为双线性插值
plt.axis("off") # 关掉图像的坐标
plt.show()
demo
# coding:utf-8
from os import path
import chnSegment
import plotWordcloud
if __name__ == '__main__':
# 读取文件
d = path.dirname(__file__)
text = open(path.join(d, 'doc//ff.txt')).read()
# 若是中文文本,则先进行分词操作
text = chnSegment.word_segment(text)
# 生成词云
plotWordcloud.generate_wordcloud(text)
效果

大佬那个学院的
软件