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

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