前兩個代碼來自於網上對於詞雲的處理,代碼3是自己改進的內容
代碼1
來源於:Python生成中文詞雲圖
#添加自定義分詞
import jieba
from os import path #用來獲取文檔的路徑
#詞雲
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
#詞雲生成工具
from wordcloud import WordCloud,ImageColorGenerator
#需要對中文進行處理
import matplotlib.font_manager as fm
#背景圖
bg=np.array(Image.open("tuoyuan.jpg"))
#獲取當前的項目文件加的路徑
d=path.dirname(__file__)
#讀取停用詞表
stopwords_path='stopwords.txt'
#添加需要自定以的分詞
# jieba.add_word("葉文潔")
#讀取要分析的文本
text_path="ziranyuyan.txt"
#讀取要分析的文本,讀取格式
text=open(path.join(d,text_path),encoding="utf8").read()
#定義個函數式用於分詞
def jiebaclearText(text):
#定義一個空的列表,將去除的停用詞的分詞保存
mywordList=[]
#進行分詞
seg_list=jieba.cut(text,cut_all=False)
#將一個generator的內容用/連接
listStr='/'.join(seg_list)
#打開停用詞表
f_stop=open(stopwords_path,encoding="utf8")
#讀取
try:
f_stop_text=f_stop.read()
finally:
f_stop.close()#關閉資源
#將停用詞格式化,用\n分開,返回一個列表
f_stop_seg_list=f_stop_text.split("\n")
#對默認模式分詞的進行遍歷,去除停用詞
for myword in listStr.split('/'):
#去除停用詞
if not(myword.split()) in f_stop_seg_list and len(myword.strip())>1:
mywordList.append(myword)
return ' '.join(mywordList)
text1=jiebaclearText(text)
#生成
wc=WordCloud(
background_color="white", #設置背景爲白色,默認爲黑色
width=990, #設置圖片的寬度
height=440, #設置圖片的高度
margin=10, #設置圖片的邊緣
max_font_size=50,
random_state=30,
font_path='C:/Windows/Fonts/simkai.ttf' #中文處理,用系統自帶的字體
).generate(text1)
#爲圖片設置字體
my_font=fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
#產生背景圖片,基於彩色圖像的顏色生成器
image_colors=ImageColorGenerator(bg)
#開始畫圖
plt.imshow(wc)
#爲雲圖去掉座標軸
plt.axis("off")
#畫雲圖,顯示
#保存雲圖
wc.to_file("tuoyuan3.png")
代碼2
來源於:基於python的詞雲生成
import jieba
from os import path #用來獲取文檔的路徑
#詞雲
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
#詞雲生成工具
from wordcloud import WordCloud,ImageColorGenerator
#需要對中文進行處理
import matplotlib.font_manager as fm
#背景圖
bg=np.array(Image.open("man.jpg"))
#獲取當前的項目文件加的路徑
d=path.dirname(__file__)
#讀取停用詞表
stopwords_path='stopwords.txt'
#添加需要自定以的分詞
jieba.add_word("侯亮平")
jieba.add_word("沙瑞金")
jieba.add_word("趙東來")
#讀取要分析的文本
text_path="人民的名義.txt"
#讀取要分析的文本,讀取格式
text=open(path.join(d,text_path),encoding="utf8").read()
#定義個函數式用於分詞
def jiebaclearText(text):
#定義一個空的列表,將去除的停用詞的分詞保存
mywordList=[]
#進行分詞
seg_list=jieba.cut(text,cut_all=False)
#將一個generator的內容用/連接
listStr='/'.join(seg_list)
#打開停用詞表
f_stop=open(stopwords_path,encoding="utf8")
#讀取
try:
f_stop_text=f_stop.read()
finally:
f_stop.close()#關閉資源
#將停用詞格式化,用\n分開,返回一個列表
f_stop_seg_list=f_stop_text.split("\n")
#對默認模式分詞的進行遍歷,去除停用詞
for myword in listStr.split('/'):
#去除停用詞
if not(myword.split()) in f_stop_seg_list and len(myword.strip())>1:
mywordList.append(myword)
return ' '.join(mywordList)
text1=jiebaclearText(text)
#生成
wc=WordCloud(
background_color="white",
max_words=200,
mask=bg, #設置圖片的背景
max_font_size=60,
random_state=42,
font_path='C:/Windows/Fonts/simkai.ttf' #中文處理,用系統自帶的字體
).generate(text1)
#爲圖片設置字體
my_font=fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
#產生背景圖片,基於彩色圖像的顏色生成器
image_colors=ImageColorGenerator(bg)
#開始畫圖
plt.imshow(wc.recolor(color_func=image_colors))
#爲雲圖去掉座標軸
plt.axis("off")
#畫雲圖,顯示
plt.figure()
#爲背景圖去掉座標軸
plt.axis("off")
plt.imshow(bg,cmap=plt.cm.gray)
#保存雲圖
wc.to_file("man.png")
代碼3
# #!/usr/bin/env python
# #-*- coding:utf-8 -*-
#
import matplotlib.pyplot as plt
from PIL import Image as image
import jieba
import numpy
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
# todo 1 通過jieba工具將中文文本做處理,並返回指定格式的內容
def chinese_jieba(text):
wordlist_jieba = jieba.cut(text)
text_jieba = ' '.join(wordlist_jieba)
return text_jieba
# todo 2 主函數
def main(filename):
with open(filename,'rb') as f:
text = chinese_jieba(f.read().decode())
bg = numpy.array(image.open("./image/cloudword.png")) # 背景圖,設置遮罩層
stopwords = set(STOPWORDS)
stopwords = stopwords.union(set(['經與', '失敗'])) # 將不想在詞雲上出現的詞,放入集合中,也就是設置固定詞個數爲0
wordclod = WordCloud(
background_color='white', # 設置背景顏色,默認是黑色
width=990, # 設置圖片的寬度
height=440, # 設置圖片的高度
margin=0, # 設置圖片的邊緣
max_words=200, # 關鍵字的個數
max_font_size=80, # 字體大小
font_path='C:/Windows/Fonts/simkai.ttf' , # 設置中文識別
mask=bg, # 添加遮罩層,也就是設置詞雲形狀
stopwords=stopwords, # 過濾固定的詞
).generate(text) # 將text裏面所有的詞統計,產生詞雲
image_colors=ImageColorGenerator(bg)
plt.imshow(wordclod.recolor(color_func=image_colors))
# plt.imshow(wordclod)
plt.axis('off')
plt.show()
wordclod.to_file('wordcloud.jpg') # 保存圖片
# if __name__ == "__main__":
# filename = r'術語\user_dict.txt'
# main(filename)