日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python词云乱码_python词云库wordCloud使用方法详解(解决中文乱码)

發布時間:2025/3/8 python 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python词云乱码_python词云库wordCloud使用方法详解(解决中文乱码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章中的例子主要借鑒wordColud的examples,在文章對examples中的例子做了一些改動。

一、wordColud設計中文詞云亂碼

使用wordColud設計詞云的時候可能會產生亂碼問題,因為wordColud默認的字體不支持中文,所以我們只需要替換wordColud的默認字體即可正常顯示中文。

1、中文詞云亂碼

我們使用simhei(黑體)來替換wordColud的默認字體。

2、替換默認字體

a、在字體文件*.tff字體文件(simhei.tff)拷貝到wordColud安裝的文件夾中,文件夾路徑:anaconda(python)-->lib-->site-packages-->wordcolud,如下圖:

其中矩形框出來的是wordColud默認的字體,橢圓形框的是我們下載的字體。

b、修改wordcolud.py文件中的字體設置,打開改路徑下的wordcolud.py文件,找到下圖的所示的框出來的這一行(29行)

將系統的DroidSansMono.tff修改為simhei.tff即可。

二、wordColud示例

1、設計一個簡單的圓形詞云

import numpy as np

import matplotlib.pyplot as plt

from wordcloud import WordCloud,STOPWORDS

from PIL import Image

from os import path

import matplotlib.pyplot as plt

#用來正常顯示中文

plt.rcParams["font.sans-serif"]=["SimHei"]

#用來正常顯示負號

plt.rcParams["axes.unicode_minus"]=False

import os

import random,jieba

'''

繪制單個詞一個圓形的詞云

'''

def single_wordColud():

text = "第一 第二 第三 第四"

#產生一個以(150,150)為圓心,半徑為130的圓形mask

x,y = np.ogrid[:300,:300]

mask = (x-150) ** 2 + (y-150) ** 2 > 130 ** 2

mask = 255 * mask.astype(int)

wc = WordCloud(background_color="white",repeat=True,mask=mask)

wc.generate(text)

#將x軸和y軸坐標隱藏

plt.axis("off")

plt.imshow(wc,interpolation="bilinear")

plt.show()

2、以圖片形狀作為背景設計詞云

下面以蠟筆小新的這張圖片作為背景來設計一個詞云,我們通過讀取一個txt文件,文件中包含了很多段落,然后通過jieba對句子進行分詞,去除停用詞之后,生成一張詞云的照片。

a、讀取文件內容

使用jieba分詞后,詞之間需要通過空格進行分割,不然在產生詞云的時候回變成一個詞。

'''

中文分詞

'''

def segment_words(text):

article_contents = ""

#使用jieba進行分詞

words = jieba.cut(text,cut_all=False)

for word in words:

#使用空格來分割詞

article_contents += word+" "

return article_contents

b、讀取停用詞

停用詞包括一些標點符號,和一些沒有實際意義的詞,我們需要將這些詞都去除。

'''

從文件中讀取停用詞

'''

def get_stopwords():

dir_path = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

#獲取停用詞的路徑

stopwords_path = os.path.join(dir_path,"txt/stopwords.txt")

#創建set集合來保存停用詞

stopwords = set()

#讀取文件

f = open(stopwords_path,"r",encoding="utf-8")

line_contents = f.readline()

while line_contents:

#去掉回車

line_contents = line_contents.replace("\n","").replace("\t","").replace("\u3000","")

stopwords.add(line_contents)

line_contents = f.readline()

return stopwords

c、生成詞云圖片

def drow_mask_wordColud():

#獲取當前文件的父目錄

d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

mask = np.array(Image.open(path.join(d,"img/test.jpg")))

text = open(path.join(d,"txt/test.txt"),"r",encoding="utf-8").read().

replace("\n","").replace("\t","").replace("\u3000","")

#對文本進行分詞

text = segment_words(text)

#獲取停用詞

stopwords = get_stopwords()

#創建詞云

'''

max_words:顯示詞的數量

mask:背景

stopwords:停用詞,是一個set集合

margin:詞之間的間隔

background_color:詞云圖片背景顏色

'''

wc = WordCloud(max_words=100,mask=mask,background_color="white",

stopwords=stopwords,margin=10,random_state=1).generate(text)

default_colors = wc.to_array()

# #保存詞云圖片

# wc.to_file("a_new_hope.png")

plt.imshow(default_colors,interpolation="bilinear")

plt.axis("off")

plt.show()

3、自定義詞云的顏色

from wordcloud import WordCloud,get_single_color_func

import matplotlib.pyplot as plt

'''

定義一個字體顏色設置類

'''

class GroupedColorFunc(object):

def __init__(self,color_to_words,default_color):

self.color_func_to_words=[

(get_single_color_func(color),set(words))

for (color,words) in color_to_words.items()

]

self.defalt_color_func=get_single_color_func(default_color)

def get_color_func(self,word):

try:

#設置每個詞的顏色

color_func = next(color_func for (color_func,words) in self.color_func_to_words

if word in words)

except StopIteration:

#詞的默認顏色

color_func = self.defalt_color_func

return color_func

def __call__(self,word,**kwargs):

return self.get_color_func(word)(word,**kwargs)

if __name__ == "__main__":

text = "第一 第二 第三 第四 第五 第六"

#創建詞云

wc = WordCloud(collocations=False,background_color="white").generate(text)

#設置詞的顏色

color_to_words={

#使用RGB來設置詞的顏色

"#00ff00":["第一","第五"],

"red":["第三","第六"],

"yellow":["第二"]

}

#設置詞默認的顏色

default_color = "blue"

grouped_color_func = GroupedColorFunc(color_to_words,default_color)

#設置詞云的顏色

wc.recolor(color_func=grouped_color_func)

#顯示詞云圖

plt.figure()

plt.imshow(wc,interpolation="bilinear")

plt.axis("off")

plt.show()

通過詞的顏色設置類,來設置不同詞的顏色。

4、自定義突出詞的重要程度

在生成詞云的時候,默認使用的是使得詞頻高的詞更加突出,突出的詞會比較大,有時候我們已經計算出了詞的權重,想通過詞云圖來突出權重大小的差別。

from wordcloud import WordCloud

import matplotlib.pyplot as plt

import numpy as np

def get_mask():

x,y = np.ogrid[:300,:300]

mask = (x-150) ** 2 + (y-150) ** 2 > 130 ** 2

mask = 255 * mask.astype(int)

return mask

if __name__ == "__main__":

#每個詞的權重

text = {"第一":0.1,"第二":0.2,"第三":0.3,"第四":0.4,"第五":0.5}

wc = WordCloud(background_color="white",mask=get_mask())

wc.generate_from_frequencies(text)

plt.axis("off")

plt.imshow(wc,interpolation="bilinear")

plt.show()

5、保存詞云圖片

wc.to_file("test.png")

更多關于python詞云庫wordCloud使用方法請查看下面的相關鏈接

總結

以上是生活随笔為你收集整理的python词云乱码_python词云库wordCloud使用方法详解(解决中文乱码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。