学习链接网站:
词云学习1
词云学习2
wordcloud参数说明
matlibplot用法链接
numpy用法
PIL图像处理模块用法
jieba 常见用法
读文件出现的问题解决方法
程序结构
|- data //新建文件夹
|- alice.txt //下载文件
|- yxgltext.txt //下载文件
|- stopwords.txt //下载文件
|- SourceHanSerifK-Light.otf //下载文件
|- plot //新建文件夹
|- alice_color.png //下载图片
|- queen.jpg //下载图片
|- alice1.py //新建python文件
|- alice2.py //新建python文件
|- queen.py //新建python文件
程序要用的文件
链接:https://pan.baidu.com/s/16rBpSCK5lPrCrhUpQWsqAQ
提取码:j7zr
词云图
# -*- coding:utf-8 -*-
# author:chenqian time:2019/3/30
import os
os.chdir("C:/Users/Administrator.PC-20170407LSUI/Desktop/文本语义/NLP(Python)") # 换成你的wordcloud文件夹所在路径
from wordcloud import WordCloud
f = open('data/alice.txt').read()
wordcloud = WordCloud(background_color="white",width=1000, height=860, margin=2).generate(f)
# width,height,margin可以设置图片属性
# generate 可以对全部文本进行自动分词,但是对中文支持不好
# wordcloud = WordCloud(font_path = r'D:\Fonts\simkai.ttf').generate(f)
# 你可以通过font_path参数来设置字体集
# background_color参数为设置背景颜色,默认颜色为黑色
import matplotlib.pyplot as plt
# ax = plt.imshow(wordcloud)
# # 创建Figure
# # fig = ax.figure
# # fig.set_size_inches(25,20) # 可调节图片紧密 尺寸程度
plt.imshow(wordcloud)
plt.axis("off") # 关闭座标轴
plt.show()
wordcloud.to_file('plot/test.png')
有形状的图
# -*- coding:utf-8 -*-
# author:chenqian time:2019/3/30
import os
os.chdir("C:/Users/Administrator.PC-20170407LSUI/Desktop/文本语义/NLP(Python)") # 换成你的wordcloud文件夹所在路径
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
# Read the whole text.
text = open('data/alice.txt').read()
alice_coloring = np.array(Image.open("plot/alice_color.png")) # 可随意更换图片
stopwords = set(STOPWORDS) # 使用内置的停用词
# print(type(stopwords)) # set类型
stopwords.add("said") # 添加停用词
# 你可以通过 mask 参数 来设置词云形状
wc = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,
stopwords=stopwords, max_font_size=40, random_state=42)
# generate word cloud
wc.generate(text)
# 改变字体颜色,从照片中取色
image_colors = ImageColorGenerator(alice_coloring)
# 方式 1 -------------------------------------------------------------------
# show
#
# fig, axes = plt.subplots(1, 3)
# axes[0].imshow(wc, interpolation="bilinear")
# axes[1].imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
# axes[2].imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")
#
# for ax in axes:
# ax.set_axis_off()
# fig = ax.figure
# fig.set_size_inches(25,20) # 可调节图片紧密 尺寸程度
# plt.show()
# 方式 2 -------------------------------------------------------------------
# show
# 在只设置mask的情况下,你将会得到一个拥有图片形状的词云,颜色并不是对应图片的颜色
plt.axis("off")
# 将词云图wc置入座标轴中,interpolation指插入
ax = plt.imshow(wc, interpolation="bilinear")
fig = ax.figure
fig.set_size_inches(25,20) # 设置图像大小
plt.figure()
# recolor wordcloud and show
# we could also give color_func=image_colors directly in the constructor
# 我们还可以直接在构造函数中直接给颜色
# 通过这种方式词云将会按照给定的图片颜色布局生成字体颜色策略
plt.axis("off") # 取消座标轴
# 这一个对词云重新着色,对应的是照片原色
ax = plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
fig = ax.figure
fig.set_size_inches(25,20) # 可调节图片紧密 尺寸程度
plt.figure()
plt.axis("off")
# 展示原照片
ax = plt.imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")
fig = ax.figure
fig.set_size_inches(25,20) # 可调节图片紧密 尺寸程度
plt.show()
中文词云图
"""
@author:CQ
@software:PyCharm
@time:2019/4/1
"""
import os
os.chdir("C:/Users/Administrator.PC-20170407LSUI/Desktop/文本语义/NLP(Python)") # 换成你的wordcloud文件夹所在路径
import jieba.analyse # 导入结巴分词
import numpy as np # numpy
from wordcloud import WordCloud, STOPWORDS # 词云工具和自带的的停用词,英文
from PIL import Image # 图片处理
import matplotlib.pyplot as plt
'''
@:parameter
textfile:文本路径及文件名
stopword:停用词数组
savefile:图片保存的路径及文件名
'''
def handle(textfile, stopword,savefile):
with open(textfile, 'r') as f:
data = f.read()
# print(type(data))
# <class 'str'>
wordlist = jieba.analyse.extract_tags(data, topK=100) # 分词,取前100
# print(type(wordlist))
# <class 'list'>
wordStr = " ".join(wordlist)
# print(wordStr) # 类型为字符串类型
hand = np.array(Image.open('plot/queen.jpg')) # 打开一张图片,词语以图片形状为背景分布
my_cloudword = WordCloud(
# wordcloud参数配置
width=1024,f
height=768,
background_color='white', # 背景颜色设置白色
mask=hand, # 背景图片
max_words=100, # 最大显示的字数
stopwords=stopword, # 停用词
max_font_size=100, # 字体最大值
font_path='data/SourceHanSerifK-Light.otf', # 设置中文字体,若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
random_state=3, # 设置有多少种随机生成状态,即有多少种配色方案
)
my_cloudword.generate(wordStr) # 生成图片
plt.axis('off') # 是否显示x轴、y轴下标
ax = plt.imshow(my_cloudword) # 显示词云图
fig = ax.figure
fig.set_size_inches(25, 20) # 可调节图片紧密 尺寸程度
plt.show() # 显示
my_cloudword.to_file(savefile)
stopwords = open('data/stopwords.txt',encoding='gb18030', errors='ignore').read()
# stopwords = open('data/stopwords.txt').read().decode('gb18030','ignore')
stopwords = set(stopwords.split('\n'))
handle('data/yxgl.txt', stopwords,'plot/chinesewordcloud.png')