學習鏈接網站:
詞雲學習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')