在前兩章佩耳,介紹了文本材料的準(zhǔn)備 以及 WordArt 可視化干厚。這里我介紹如何自己動(dòng)手DIY屬于自己的詞云。
-
材料:
- 文本數(shù)據(jù)
- python (jieba悬嗓,wordcloud)
安裝 jieba 和 wordcloud :pip install jieba
pip install wordcloud
wordcloud 生成需要詞語(yǔ)作為元素籍凝,由于wordcloud是國(guó)外的苗缩,對(duì)中文支持不好,所以我們需要提前對(duì)文本進(jìn)行分詞統(tǒng)計(jì)處理退盯,得到關(guān)鍵詞進(jìn)行可視化泻肯。
-
實(shí)現(xiàn):
- 方式一:
直接將分詞結(jié)果放入wordcloud.generate()
函數(shù)中進(jìn)行處理(wrd_dict
是分詞的結(jié)果)
import matplotlib.pyplot as plt from wordcloud import WordCloud #可視化 BKImg=np.array(Image.open("heart.jpg"))# 加入自定義背景圖片 my_wordcloud = WordCloud( background_color='white', # 設(shè)置背景顏色 mask = BKImg, # 設(shè)置背景圖片 max_words = rank_K, # 設(shè)置最大現(xiàn)實(shí)的字?jǐn)?shù) #stopwords = "小嫣嫣小星星", # 設(shè)置停用詞 font_path = 'FZLTHJW.TTF',# 設(shè)置字體格式灶挟,如不設(shè)置顯示不了中文 max_font_size = 80, # 設(shè)置字體最大值 min_font_size = 10, # relative_scaling=0.5, random_state = 30, # 設(shè)置有多少種隨機(jī)生成狀態(tài),即有多少種配色方案 scale=1 ).generate(wrd_dict) clr=ImageColorGenerator(BKImg) # 加入背景的配色方案 plt.imshow(my_wordcloud.recolor(color_func=clr))` plt.imshow(my_wordcloud) plt.axis("off") plt.show() #顯示 my_wordcloud.to_file("result1.png") # 將結(jié)果寫入png
- 方式二:
- 方式一是將分好的詞加入自定義詞典箱叁,加入
generate()
函數(shù)耕漱,但是這樣得到的結(jié)果卻不是很理想,最終 wordcloud 整理出來(lái)的結(jié)果將人名和一些人所說(shuō)的話并在一起灾梦,導(dǎo)致“小王 哈哈哈”齐鲤,“小王”都被分進(jìn)詞云的詞典,導(dǎo)致“小王”這個(gè)詞重復(fù)出現(xiàn)牡肉。 - 為了解決這個(gè)問(wèn)題,查看
WordCloud
這個(gè)類(對(duì)象)淆九,找到generate_from_frequencies(wrd_dict)
這個(gè)函數(shù)统锤,送入的是自定義的字典{[對(duì)象]:[頻率]})
- 方式一是將分好的詞加入自定義詞典箱叁,加入
# 制作詞典 wrd_dict={} for i in range(0,rank_K): wrd_dict[str(tags[i][0])]=round(math.log(tags[i][1]*len_txt,1.5)) #可視化 BKImg=np.array(Image.open("heart.jpg")) my_wordcloud = WordCloud( background_color='white', # 設(shè)置背景顏色 mask = BKImg, # 設(shè)置背景圖片 max_words = rank_K, # 設(shè)置最大現(xiàn)實(shí)的字?jǐn)?shù) #stopwords = "小嫣嫣小星星", # 設(shè)置停用詞 font_path = 'FZLTHJW.TTF',# 設(shè)置字體格式,如不設(shè)置顯示不了中文 max_font_size = 80, # 設(shè)置字體最大值 min_font_size = 10, # relative_scaling=0.5, random_state = 30, # 設(shè)置有多少種隨機(jī)生成狀態(tài)炭庙,即有多少種配色方案 scale=1 ).generate_from_frequencies(wrd_dict) clr=ImageColorGenerator(BKImg) plt.imshow(my_wordcloud.recolor(color_func=clr)) plt.imshow(my_wordcloud) plt.axis("off") plt.show() my_wordcloud.to_file("result2.png")
- 這里
math.log()
是調(diào)整聊天記錄中出現(xiàn)頻率過(guò)度頻繁的人的名字的權(quán)重饲窿,使得樣 本權(quán)重比較平衡。
- 方式一:
-
成果:
qq 聊天記錄詞云