Python生成一篇文章的詞雲圖


使用前需要確保安裝以下第三方庫:

 jieba, wordcloud, imageio, sklearn,csv 

imageio、csv和sklearn在安裝anaconda時默認是安裝的,另外兩個庫需要手動安裝,安裝方式如下:

打開Anaconda Prompt使用pip安裝即可:

pip install jieba
pip install wordcloud

我們選一篇自己喜歡的文章,然后保存為txt,放到工作目錄下。我選取的文章為知乎上秋葉大叔的一篇文章:如何實現財富自由?

我將其內容保存為"caifu.txt",放在工作目錄下,以下是獲得這篇文章詞雲圖的過程。

獲得詞雲圖

from wordcloud import WordCloud, STOPWORDS
from imageio import imread
from sklearn.feature_extraction.text import CountVectorizer
import jieba
import csv
# 獲取文章內容
with open("caifu.txt") as f:
    contents = f.read()
print("contents變量的類型:", type(contents))

# 使用jieba分詞,獲取詞的列表
contents_cut = jieba.cut(contents)
print("contents_cut變量的類型:", type(contents_cut))
contents_list = " ".join(contents_cut)
print("contents_list變量的類型:", type(contents_list))

# 制作詞雲圖,collocations避免詞雲圖中詞的重復,mask定義詞雲圖的形狀,圖片要有背景色
wc = WordCloud(stopwords=STOPWORDS.add("一個"), collocations=False, 
               background_color="white", 
               font_path=r"C:\Windows\Fonts\simhei.ttf",
               width=400, height=300, random_state=42, 
               mask=imread('axis.png',pilmode="RGB"))
wc.generate(contents_list)
wc.to_file("ciyun.png")

# 使用CountVectorizer統計詞頻
cv = CountVectorizer()
contents_count = cv.fit_transform([contents_list])
# 詞有哪些
list1 = cv.get_feature_names()
# 詞的頻率
list2 = contents_count.toarray().tolist()[0] 
# 將詞與頻率一一對應
contents_dict = dict(zip(list1, list2))
# 輸出csv文件,newline="",解決輸出的csv隔行問題
with open("caifu_output.csv", 'w', newline="") as f:
    writer = csv.writer(f)
    for key, value in contents_dict.items():
        writer.writerow([key, value])

上述代碼中,變量的類型如下:

contents變量的類型: <class 'str'>
contents_cut變量的類型: <class 'generator'>
contents_list變量的類型: <class 'str'>

詞雲圖的形狀我嘗試了兩種,一種是cat.png,另一種是在PPT中直接畫一個箭頭,保存為圖片格式,如下圖:

兩種背景圖產生的詞雲圖結果如下:

我們可以把背景圖的設置為任意形狀和圖片,如果沒有合適的照片,我們可以用PPT自己畫一個合適的形狀。

獲得詞頻列表,保存為csv文件

如果還想要獲得詞頻列表,可以使用sklearn中的CountVectorizer統計詞頻,當然也可以自己寫函數實現。上述代碼輸出了詞頻的csv文件,如下圖:

 

參考鏈接:

[1] https://zhuanlan.zhihu.com/p/68874733


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM