Jieba庫使用和好玩的詞云
一、關于詞云
WordCloud庫常規方法
- 以WordCloud物件為基礎
- 配置引數、加載文本、輸出檔案
| 函式 | 簡述 |
| w.generate(txt) | 向WordCloud物件w中加載文本txt |
| w.to_file(file name) | 將詞云輸出為影像檔案,例如.png格式 |
方法
步驟:
- 配置物件引數
- 加載詞云文本
- 輸出詞云檔案
配置物件引數
| 函式 | 簡述 |
| font_path | 字體路徑,做中文詞云必須設定字體,否則無法顯示 |
| width | 輸出的畫布寬度,默認為400像素 |
| height | 輸出的畫布高度,默認為200像素 |
| max_words | 要顯示的詞的最大個數,默認為200 |
| stop_words | 指定詞云的排除詞串列,即不顯示的單詞串列 |
| max_font_size | 顯示的最大字體大小 |
| min_font_size | 顯示的最小字體大小 |
| background_color | 指定詞云圖片的背景顏色,默認為黑色 |
| mask | 指定詞云形狀,默認為長方形,需要參考imread()函式 |
二、文本詞頻統計(以《紅樓夢》為例)
- 下載一個《紅樓夢》文本 這里將文本命名為 hongloumeng.txt
- 撰寫代碼如下:
#DreaminRedMansions.py import jieba #呼叫jieba庫 txt = open("hongloumeng.txt","r",encoding="UTF-8").read() #打開txt檔案閱讀 words = jieba.lcut(txt) #分詞 counts = {} #建立一個空字典 for word in words: if len(word)==1: continue else: counts[word]=counts.get(word,0) + 1 #遍歷每個中文單詞,通過字典來計數 items = list(counts.items()) #將字典counts轉換為串列型別 items.sort(key=lambda x:x[1],reverse = True) #對串列進行排序 for i in range(20): word,count = items[i] print("{0:<10}{1:>5}".format(word,count)) #列印出前20個詞
但是運行出現錯誤,

這是因為沒有寫明文本所在的絕對路徑,以致找不到文本,打開文本屬性找到位置復制即可,
執行任有錯誤,

win10電腦文本編碼默認為ASCII碼,我們應將其改為UTF-8編碼,打開 hongloumeng.txt --檔案--另存為--編碼--UTF-8,取名為 shitouji.txt ,按照上述方法找到新的文本位置即可,改正的代碼如下:
#DreaminRedMansions.py
import jieba #呼叫jieba庫
txt = open("D:\我愛學習\python3\wenben\shitouji.txt","r",encoding="UTF-8").read() #打開txt檔案閱讀
words = jieba.lcut(txt) #分詞
counts = {} #建立一個空字典
for word in words:
if len(word)==1:
continue
else:
counts[word]=counts.get(word,0) + 1 #遍歷每個中文單詞,通過字典來計數
items = list(counts.items()) #將字典counts轉換為串列型別
items.sort(key=lambda x:x[1],reverse = True) #對串列進行排序
for i in range(20):
word,count = items[i]
print("{0:<10}{1:>5}".format(word,count)) #列印出前20個詞
效果如下:

三、詞云展現
1、運用jieba庫和wordcloud庫,代碼如下:注: .join( )函式: 連接字串陣列,將字串、元組、串列中的元素以指定的字符(分隔符)連接生成一個新的長字串
from wordcloud import WordCloud
import jieba
def create_word_cloud():
path_txt = 'D:\我愛學習\python3\wenben\\shitouji.txt'
text = open(path_txt,"r",encoding="UTF-8").read()
wordlist = jieba.lcut(text) # jieba分詞
wl = " ".join(wordlist)
# 設定詞云
w = WordCloud(
# 設定背景顏色為白色
background_color="white",
# 設定最大顯示的詞云數為200
max_words=200,
# 字體的一般路徑--宋體
font_path='simsun.ttc',
height=1200,
width=1600,
# 設定字體最大的字體大小
max_font_size=100,
# 設定配色方案
random_state=100,
)
w.generate(wl) # 生成詞云
w.to_file('img_book1.png') # 把詞云保存下
if __name__ == '__main__':
create_word_cloud()
效果如下:


2、指定詞云形狀
mask:指定詞云形狀
需要參考imread函式,目前 scipy庫不包含 imread 函式,imread函式在imageio庫里,
from imageio import imread
mk = imread("cloud.png") #存為圖片 cloud
w = wordcloud.WordCloud(mask = mk)
也可以用其他庫,
- numpy庫:numpy庫是Python的一個擴展程式庫,能夠支持維度陣列與矩陣運算,
- matplotlib庫:matplotlib是python上的一個2D繪圖庫,它可以在夸平臺上邊出很多高質量的影像,
- PIL庫:PIL 庫是python中很有用的處理影像的庫,對影像進行操作處理, 包括對原圖處理,以及產生新的圖片,從檔案加載影像,可以使用Image.open( )函式,需要給出圖片的絕對路徑,例如:
from PIL import Image
im = Image.open('chrome.png') #圖片的絕對路徑
指定詞云形狀的代碼如下:
from wordcloud import WordCloud
from matplotlib import pyplot as plt
from PIL import Image
import numpy as np
import jieba
def create_word_cloud():
path_txt = 'D:\\我愛學習\\python3\\wenben\\shitouji.txt'
text = open(path_txt,"r",encoding="UTF-8").read()
wordlist = jieba.lcut(text) # jieba分詞
wl = " ".join(wordlist)
images = Image.open("C:\\Users\\鄧若言\\Desktop\\timg.jpg")
maskImages = np.array(images)
# 設定詞云
w = WordCloud(
# 設定背景顏色為白色
background_color="white",
# 設定最大顯示的詞云數為2000
max_words=2000,
# 字體的一般路徑--宋體
font_path='simsun.ttc',
height=1200,
width=1600,
# 設定字體最大的字體大小
max_font_size=100,
# 設定配色方案
random_state=100,
mask=maskImages
)
w.generate(wl) # 生成詞云
plt.imshow(w)
w.to_file('img_book2.png') # 把詞云保存下
if __name__ == '__main__':
create_word_cloud()

原圖片
新詞云圖片如下

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/162031.html
標籤:Python
