Python生成詞雲圖

前兩個代碼來自於網上對於詞雲的處理,代碼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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章