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,如下圖:

20021733730170549248537134.png

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

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

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

20021733730462928259610614.png

二、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()

20021733730659493872488467.png

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

20021733730948749274432047.jpg

下面以蠟筆小新的這張圖片作為背景來設計一個詞云,我們通過讀取一個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()

20021733731075076094049131.png

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()

20021733731184661109342794.png

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

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()

20021733731359635269913338.png

5、保存詞云圖片

wc.to_file("test.png")

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534892.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

easyui java管理系統_EasyUI 后臺管理系統

ASP.NET MVC5+EF6+EasyUI 后臺管理系統(1)-前言與目錄(持續更新中...)開發工具:VS2015(2012以上)SQL2008R2以上數據庫 您可以有償獲取一份最新源碼聯系QQ:729994997 價格 666RMB 升級后界面效果如下: 任務調度…

linux同時安裝python2和python3_linux-Centos7安裝python3并與python2共存

1.查看是否已經安裝Python CentOS 7.2 默認安裝了python2.7.5 因為一些命令要用它比如yum 它使用的是python2.7.5。 使用 python -V 命令查看一下是否安裝Python 然后使用命令 which python 查看一下Python可執行文件的位置可見執行文件在/usr/bin/ 目錄下,切換到該…

opencv獲取模板旋轉角度_OpenCV入門之獲取圖像的旋轉角度

在我們的日常生活中,所碰到的圖像往往都有一定的傾斜。那么,如何用OpenCV來獲取圖像的旋轉角度呢? ??我們以下面的圖片為例,簡單介紹如何用OpenCV來獲取圖像的旋轉角度。可以看到,該圖像存在著許多噪聲,且…

后臺使用orm多還是直接sql_Django應用app創建及ORM

Django應用app創建及ORM一.重要知識點回顧:1. form表單提交數據的注意事項:1. 是form不是from,必須要有method和action (action用來指定你的數據提交到后臺哪個地方,method用來指定你提交數據的方式)2. 所有獲取用戶輸入的表單標簽要放在form表單里面&am…

java ruby腳本_Java 程序中直接執行 Ruby 腳本 (JRuby)

1.[代碼]MainClass.javaimport java.io.BufferedReader;import java.io.FileReader;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;public class MainClass {public static void main(String[] args) throws Excep…

python win32gui安裝_python-無法安裝win32gui

我正在嘗試使用pip安裝win32gui,但出現錯誤: C:\Users\?????>pip install win32gui Collecting win32gui Using cached https://files.pythonhosted.org/packages/b8/75/7bed82934e51903f9d48b26b3996161bb2dce1731607b4bb7fd26003ed3e/win32gui-221.5.tar.…

時間戳 java_java中獲取時間戳的方法

在java開發過程中經常會遇到統計某一天或是某一個月的數據,因此常常需要獲取截取數據的兩個時間戳(比如統計今天的數據,則需要獲取一個開始時間為今天零點以及一個結束時間為明天零點),然后根據數據相關的時間是否在該時間區間內來判斷是否將…

求一批整數中出現最多的個位數字_C語言經典100例007-求低n-1位的數

系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點贊、轉發、收藏哦~后續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收1 題目函數:unsigned fun(unsigned w)功能…

python合并多個pdf_python合并多個pdf文件

假設您有個無聊的工作,將幾十個PDF文檔合并成一個PDF文件。 他們每個都有封面頁作為第一頁,但你不希望在最終結果中重復覆蓋表。 即使有有很多免費的程序來組合PDF,其中許多只是合并整個文件在一起。 讓我們編寫一個Python程序來自定義哪些頁…

python class類_python類class基礎

44、class類:一、類定義的一般形式:1、簡單的形式:實例化對象沒有自己獨有的數據屬性。>>> class fistclass():... data1 hello world ### >這是類的數據屬性或類成員屬性。... def printdata(self): ###>這是類的方法&#…

java文件序列化_Java序列化與反序列化,文件操作

參考兩篇博客:http://blog.csdn.net/moreevan/article/details/6697777http://blog.csdn.net/moreevan/article/details/6698529針對第二篇博客,看了下面的評論,發現子類輸出的書號其實是父類的,書名是自己先添加的成員變量&#…

python 徹底解讀多線程與多進程_python 多進程與多線程淺析

python多線程是偽多線程,同時間最多只有一個線程在執行,但這樣并不代碼python的多線程沒有作用,對于IO密集型的系統,python的多線程還是能極大的提升性能~關于python偽多線程可以去了解python GIL的概念。以下代碼涉及…

python什么軟件開發好_python怎樣才能學好?python軟件開發什么

眾所周知,Python是近年來熱門的編程語言之一,吸引了很多人參與到it行業的Python開發中來,但是如何學習Python編程呢?對于每一個初學Python的朋友來說,估計有點困惑。那么我們如何才能學好Python呢?學習Python需要什么技能?有些…

java 設計模式原則_Java設計模式的七大原則

設計原則名稱定 義使用頻率單一職責原則(Single Responsibility Principle, SRP)一個類只負責一個功能領域中的相應職責。★★★★☆開閉原則(Open-Closed Principle, OCP)軟件實體應對擴展開放,而對修改關閉。開閉原則的關鍵在于抽象化。★★★★★里氏代換原則(L…

python自定義模塊和三方模塊_python基礎知識8——模塊1——自定義模塊和第三方開源模塊...

模塊的認識模塊,用一砣代碼實現了某個功能的代碼集合。類似于函數式編程和面向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對于一個復雜的功能來,可能需要多個函數…

dhcp只能分配與路由器相同網段么_路由器的橋接詳解

網上關于路由器無線橋接的教程很多,讓你注意那注意這的,都沒有說明白。今天,我來試著縷清它們間的關系!1、主路由器這是我主路由器目前的狀態,其中IP地址是我在上級光貓路由的可用ip段192.168.1.2~254里選的一個&#…

逆序對java_逆序對

求逆序對問題用歸并排序的時間復雜度比暴力算法更低。假設有一個數組{8,1,2,5,7,4,3,6}首先歸并排序第一次對數組進行分割 8 1 2 5 7 4 3 6二次分割 8 1 25 74 3…

python123測驗9程序題答案_Django ORM 練習題及答案_python_腳本之家

1.modles中表結構#出版社class Publisher(models.Model):name models.CharField(max_length32)city models.CharField(max_length32)def __str__(self):return "".format(self.id, self.name)#書籍class Book(models.Model):title models.CharField(max_length32)…

java父類shape_為什么該父類無法調用其子類.__ShapeCircle_public_perimeter_getType_shapej__169IT.COM...

子類:public class ShapeCircle extends Shape{protected double r;public ShapeCircle(){setside(0.0);}public ShapeCircle(double r){setside(r);}public void setside(double r){this.rr;}public double perimeter(){return Math.PI*2*r;}public String getType(){return &…

python中雙冒號的作用_python中雙冒號

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技術人對外發布原創技術內容的最大平臺&…