使用前需要確保安裝以下第三方庫:
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文件,如下圖:
參考鏈接: