用python制作詞云圖的步驟如下:1. 安裝jieba、wordcloud和matplotlib庫;2. 使用jieba進行中文分詞并過濾停用詞;3. 利用wordcloud生成詞云,指定字體路徑等參數;4. 通過matplotlib顯示詞云圖像;5. 可選使用mask參數自定義詞云形狀;6. 對于專業性強的文本可加載自定義詞典提升分詞準確性;7. 調整colormap參數或自定義顏色函數優化顏色搭配;8. 面對大規模數據時采用分塊處理或提取關鍵詞減少計算量。
用python制作詞云圖,簡單來說,就是把一段文字里出現頻率高的詞,以圖形化的方式展示出來,詞頻越高,詞就越大。這不僅能快速抓住文本重點,還能讓數據分析變得更酷炫。核心在于兩個庫:jieba(用于中文分詞)和wordcloud(用于生成詞云)。
解決方案:
-
安裝必要的庫:
立即學習“Python免費學習筆記(深入)”;
pip install jieba wordcloud matplotlib
jieba負責把中文句子拆分成詞語,wordcloud負責生成詞云,matplotlib用于顯示圖片。
-
準備文本數據: 你需要一段中文文本,比如一篇文章、一段評論等等。
-
中文分詞: 使用jieba進行分詞,并過濾掉停用詞(例如“的”、“是”等)。
import jieba def segment(text): seg_list = jieba.cut(text, cut_all=False) return " ".join(seg_list) text = "這是一段用來生成詞云的中文文本,jieba分詞非常重要。" segmented_text = segment(text) print(segmented_text)
-
生成詞云: 使用wordcloud生成詞云圖片。
from wordcloud import WordCloud import matplotlib.pyplot as plt wordcloud = WordCloud(font_path='msyh.ttc', # 字體文件路徑,解決中文顯示問題 background_color="white", # 背景顏色 max_words=200, # 最大顯示的詞語數量 max_font_size=100, # 字體最大值 random_state=42) # 設置有多少種隨機狀態,即有多少種配色方案 wordcloud.generate(segmented_text) plt.figure(figsize=(12,12)) plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") plt.show()
注意:font_path需要指定一個支持中文的字體文件,否則中文會顯示成方塊。可以從系統字體目錄中選擇,例如windows下的C:WindowsFontsmsyh.ttc(微軟雅黑)。
-
自定義詞云形狀: 如果你想讓詞云呈現特定的形狀,可以使用mask參數。
import numpy as np from PIL import Image # 讀取背景圖片 mask = np.array(Image.open("mask.png")) # 替換成你的背景圖片路徑 wordcloud = WordCloud(font_path='msyh.ttc', background_color="white", max_words=200, mask=mask, # 使用mask random_state=42) wordcloud.generate(segmented_text) plt.figure(figsize=(12,12)) plt.imshow(wordcloud, interpolation="bilinear") plt.axis("off") plt.show()
mask.png應該是一個黑白圖片,白色部分將顯示詞云,黑色部分則不顯示。
如何選擇合適的中文分詞算法?
jieba分詞雖然好用,但也不是萬能的。不同的分詞算法各有優劣。例如,對于專業性較強的文本,可能需要自定義詞典,以提高分詞的準確性。 還可以嘗試其他分詞工具,比如SnowNLP、THULAC等,它們在某些場景下可能表現更好。 此外,jieba也支持用戶自定義詞典,可以手動添加一些專業術語,提高分詞的準確率。
jieba.load_userdict("my_dict.txt") # 加載自定義詞典
my_dict.txt是一個文本文件,每行一個詞語,可以包含詞頻和詞性。
詞云顏色搭配有什么技巧?
詞云的顏色搭配直接影響視覺效果。可以選擇與文本主題相關的顏色,或者使用互補色來增強對比度。wordcloud庫提供了colormap參數,可以指定顏色主題。
wordcloud = WordCloud(font_path='msyh.ttc', background_color="white", max_words=200, colormap='viridis', # 指定顏色主題 random_state=42)
viridis是一種流行的顏色主題,也有其他的選擇,例如magma、inferno、plasma等。 也可以自定義顏色函數,更靈活地控制每個詞語的顏色。
如何處理大規模文本數據生成詞云?
當文本數據量很大時,直接將所有文本加載到內存中進行處理可能會導致內存溢出。可以采用分塊處理的方式,將文本分成小塊,逐個處理,最后將結果合并。 另外,還可以使用jieba.analyse模塊提取關鍵詞,減少需要處理的詞語數量。
import jieba.analyse text = "這是一段很長的文本..." keywords = jieba.analyse.extract_tags(text, topK=50) # 提取前50個關鍵詞 segmented_text = " ".join(keywords)