java怎么画词云_Matplotlib学习---用wordcloud画词云(Word Cloud)
畫詞云首先需要安裝wordcloud(生成詞云)和jieba(中文分詞)。
先來說說wordcloud的安裝吧,真是一波三折。首先用pip install wordcloud出現錯誤,說需要安裝Visual C++ 14.0。折騰半天安裝好Visual C++后,還是不行,按網上指點,下載第三方包安裝(https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud)。安裝是成功了,可是在anaconda里導入的時候又出現了問題,說是"no module named wordcloud"。隨后又折騰了各種方案,比如網上有人說重新安裝pillow包,等等,均不可行。突發奇想,打開Pycharm試了試,導入成功了。這說明wordcloud包其實已經安裝好了,只是anaconda不識別。最后,終于找到解決方案:在anaconda?prompt里輸入命令:conda install -c conda-forge wordcloud,即可安裝成功(https://anaconda.org/conda-forge/wordcloud)。
總的來說,wordcloud做的是三件事:
(1) 文本預處理
(2) 詞頻統計
(3) 將高頻詞以圖片形式進行彩色渲染
from wordcloud importWordCloud, STOPWORDSfrom matplotlib importpyplot as plt
fig,ax=plt.subplots()
with open(r'...\vanity fair.txt') as f:
text=f.read()
mycloudword=WordCloud(width=800,
height=600,
scale=1,
margin=2,
background_color='white',
max_words=200,
min_font_size=40,
max_font_size=140,
stopwords=STOPWORDS,
random_state=50).generate(text)
ax.imshow(mycloudword)
ax.axis("off")
plt.show()
mycloudword.to_file(r"...\vanityfair.png")
輸出:
注:設置不同的random_state值會讓字的分布不一樣。
上面演示的是用英文做的詞云,那么如果我們要用中文生成詞云呢?這時候就要用到jieba了。
英文語料可以直接輸入到wordcloud中,但是對于中文語料,僅僅用wordcloud不能直接生成中文詞云圖。這是因為英文單詞以空格分隔,而中文的詞與詞之間一般沒有字符分隔。因此,應用到中文語料上的時候,注意要先分好詞,再用空格分隔連接成字符串,最后輸入到wordcloud。
另外需要注意的是:需要下載中文字體到相應的文件夾,設置該字體路徑為font_path。否則,如果設置的是英文字體,那么中文將顯示為方框。
讓我們用翻譯版的名利場小說來做演示:
from wordcloud importWordCloud, STOPWORDSimportjiebafrom matplotlib importpyplot as plt
fig,ax=plt.subplots()
with open(r'...\名利場.txt','rb') as f:
text=f.read()
wsplit=jieba.cut(text)
words="".join(wsplit)
mycloudword=WordCloud(font_path=r'C:\Windows\Fonts\msyh.ttf',
width=800,
height=600,
scale=1,
margin=2,
background_color='white',
max_words=200,
min_font_size=40,
max_font_size=140,
stopwords=STOPWORDS,
random_state=50).generate(words)
ax.imshow(mycloudword)
ax.axis("off")
plt.show()
mycloudword.to_file(r"...\vanityfair1.png")
輸出:
接下來,我們把詞云做成我們想要的形狀。用pillow讀取某張圖片,轉換成numpy array格式,并將其設置為mask(遮罩)。除圖片全白的部分將不會被繪制,其余部分會用于繪制詞云。
from wordcloud importWordCloud, STOPWORDSimportjiebafrom PIL importImageimportnumpy as npfrom matplotlib importpyplot as plt
fig,ax=plt.subplots()
with open(r'...\名利場.txt','rb') as f:
text=f.read()
wsplit=jieba.cut(text)
words="".join(wsplit)
shape=np.array(Image.open(r'C:\Users\ccav\timg.jpg'))
mycloudword=WordCloud(font_path=r'C:\Windows\Fonts\msyh.ttf',
scale=1,
margin=2,
background_color='white',
mask=shape,
max_words=200,
min_font_size=14,
max_font_size=50,
stopwords=STOPWORDS,
random_state=50).generate(words)
ax.imshow(mycloudword)
ax.axis("off")
plt.show()
mycloudword.to_file(r"...\vanityfair2.png")
原圖:
輸出的詞云:
此外,還可以讓詞按某個圖片的顏色進行顯示。用recolor([random_state,?color_func,?colormap])對現有輸出重新著色。(重新上色比重新生成整個詞云要快很多)
添加以下這幾句即可:
from wordcloud importImageColorGenerator
color=ImageColorGenerator(np.array(Image.open(r'...\timg2.jpg')))
mycloudword.recolor(color_func=color)
原圖:
輸出:
總結
以上是生活随笔為你收集整理的java怎么画词云_Matplotlib学习---用wordcloud画词云(Word Cloud)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java泰坦宙斯之战程序_泰坦 - 宙斯
- 下一篇: win10装机重启失败怎么办 win10