python製作詞雲

  “詞雲”又叫文字雲,是對網絡文本中出現頻率較高的“關鍵詞”予以視覺上的突出,形成“關鍵詞雲層”或“關鍵詞渲染”,從而過濾掉大量的無意義信息,使瀏覽者只要一眼掃過詞雲圖片就可以領略文章或者網頁內容的主要表達意思。

  我的製作過程:

我是在Linux環境裏開發的,使用的是python開源庫Anaconda,所以只要pip安裝wordcloud和jieba就可以了

pip install wordcloud
pip install jieba

之後就開始敲代碼了,

python爬取QQ音樂(網易雲需要API,我還沒爬過)某個歌手的全部專輯歌詞並生成詞雲圖片,最近因爲想做一個py項目,由於非常喜歡周杰倫的歌,瞭解到python適合做詞雲,從而產生了用py生成歌手所有專輯的歌中的歌詞的詞雲.

程序功能 : 獲取某個歌手的QQ音樂的專輯歌曲歌詞 - 生成歌詞雲圖片

工作原理

1. F12找到數據接口,調用並且用正則獲取json格式的數據.

2. 獲取本地的所有歌詞,清洗乾淨那些特殊字符,然後用jieba分詞,最後通過WordCloud輸出.

3. 最終在本地生成相應詞雲

效果圖如下:

 

核心代碼如下:

from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
import jieba
import PIL
import matplotlib.pyplot as plt
import numpy as np


def wordcloudplot(txt,name):
    path = 'SourceHanSerifK-Light.otf'
    alice_mask = np.array(PIL.Image.open('jaychou.jpg'))
    alice_mask1 = np.array(PIL.Image.open('alice_mask.png'))
    #WordCloud構造方法
    wordcloud = WordCloud(font_path=path,
                          background_color="white",
                          margin=5, width=1800, height=800, mask=alice_mask, max_words=2000, max_font_size=60,stopwords = STOPWORDS,
                          random_state=40,contour_color='steelblue')
    wordcloud1 = WordCloud(font_path=path,
                          background_color="white",
                          margin=5, width=1800, height=800, mask=alice_mask1, max_words=2000,max_font_size=50,stopwords = STOPWORDS,
                          random_state=40,contour_color='steelblue')
    wordcloud = wordcloud.generate(txt)
    wordcloud1 = wordcloud1.generate(txt)
    wordcloud.to_file('../Songs/'+name+'/'+name+'.jpg')
    wordcloud1.to_file('../Songs/' + name + '/' + 'test.jpg')
    # image_colors = ImageColorGenerator(alice_mask)
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

    # image_colors = ImageColorGenerator(alice_mask1)
    plt.imshow(wordcloud1, interpolation='bilinear')
    plt.axis("off")
    plt.show()


def makewordc(name):
    a = []
    f = open(r'../Songs/'+name+'/lrcs.txt', 'r').read()
    words = list(jieba.cut(f))
    for word in words:
        if len(word) > 1:
            a.append(word)
    txt = r' '.join(a)
    wordcloudplot(txt,name)


if __name__ == '__main__':
    makewordc('jaychou')

需要注意的地方是生成詞雲的那個py文件不能以wordcloud命名,其他符合要求即可.

wordcloud詞庫默認不支持中文,所以要導入中文詞庫,否則中文顯示出來的都是一些方框.安裝庫的時候我倒沒遇到什麼問題,如果有問題可以找我交流解決. 

path = 'SourceHanSerifK-Light.otf'
font_path=path

怎麼導入詞庫代碼中有了,中文詞庫源文件可以去我github上下載 

詳細代碼可以訪問我的github網址https://github.com/29DCH

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章