Python社区  »  Python

Python 词云分析周杰伦新歌《说好不哭》

苏生不惑 • 3 月前 • 44 次点击  

周杰伦难得出新歌 ,最近终于推出了单曲《说好不哭》,然后直接把QQ音乐服务器干崩了,天王的实力可见一斑,QQ音乐还把这个当作 今天过年

看我公众号头像就知道是杰伦粉了 ,高中的时候开始喜欢上了他的歌,一晃都这么多年了,我整理了他所有的歌曲和部分电影/演唱会视频,可以在公众号回复 周杰伦 获取,2个多小时的2004 无与伦比演唱会看了n遍。

还做了个杰伦的个人PPT https://sushengbuhuo.gitee.io/blog/jay/#/start,文末点击阅读原文查看,在pc上使用空格或者方向键来查看PPT。

下面开始用词云来分析杰伦这首歌都写的什么内容。

词云

词云,又称文字云,由词汇组成类似云的彩色图形,用于展示大量文本数据,就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”,从而过滤掉大量的文本信息,使浏览者只要一眼扫过文本就可以领略文本的主旨。

歌词

先看看这首歌的歌词,在QQ 音乐上可以找到https://y.qq.com/n/yqq/song/001qvvgF38HVc4.html

先把歌词保存到文件 no_cry.txt ,然后用Python的wordcloud来分析 。

wordcloud

wordcloud 是Python的一个扩展包,直接使用pip install wordcloud来安装。https://github.com/amueller/word_cloud

from PIL import Imageimport numpy as npimport matplotlib.pyplot as pltfrom wordcloud import WordCloud, STOPWORDS, ImageColorGeneratorimport jieba,wordcloudfrom snownlp import SnowNLPimport jieba.analysefrom collections import Counter
with open('no_cry.txt', 'r',encoding='utf-8') as f: data = f.read()mytext = " ".join(jieba.cut(data))wordlist = jieba.analyse.extract_tags(mytext, topK=10) # 分词,取前10['怎么', '别人', '挽留', '打扰', '放手', '说好', '在意', '没有', '从不', '拼命']#c = Counter(mytext)#c = c.most_common(10)wordcloud = WordCloud(font_path="c:\windows\fonts\simhei.ttf").generate(mytext)plt.imshow(wordcloud, interpolation='bilinear')plt.axis("off")plt.show()wordcloud.to_file('no_cry.jpg')

保存到本地的文件 no_cry.jpg图片效果:

改变下尺寸效果

接着看看这首歌的主要关键词

s = SnowNLP(mytext)# for sentence in s.sentences:# 	print(sentence)# 	sentc = SnowNLP(sentence)# 	print(sentc.sentiments)>>> s.sentiments0.9875230187654408
>>> s.summary(limit=10)

关键词如下:

['我都是听别人说', '不习惯一个人生活', '不习惯一个人生活', '说好不哭让我走', '说好不哭让我走', '都这个时候 你还在意着', '都这个时候 你还在意着', '电话开始躲 从不对我说', '电话开始躲 从不对我说', '挽留的话却没有说']

然后加个白色背景

def handle(textfile, stopword):    with open(textfile, 'r',encoding='utf-8') as f:       data = f.read()    wordlist = jieba.analyse.extract_tags(data, topK=100)   # 分词取前100    wordStr = " ".join(wordlist)         hand = np.array(Image.open('img/no_cry.jpeg'))        my_cloudword = WordCloud(        # wordcloud参数配置        width=1024,        height=768,        background_color = 'white',          #mask = hand,                           max_words = 100,                       stopwords = stopword,                  max_font_size = 100,                    font_path='c:\windows\fonts\simhei.ttf',           random_state=3,       )    my_cloudword.generate(wordStr)               my_cloudword.to_file('res.jpg')         plt.axis('off')       ax = plt.imshow(my_cloudword)       fig = ax.figure    fig.set_size_inches(25,20)                      plt.show()   stopwords = set(STOPWORDS)


    
handle('no_cry.txt', stopwords)

效果图

wordcloud_cli

如果你不想写代码 ,可以直接用命令行工具wordcloud_cli  , https://amueller.github.io/word_cloud/cli.html  可以看看命令行参数

直接执行 wordcloud_cli --text no_cry.txt --imagefile no_cry.jpg --mask ye.jpg --fontfile c:\windos\fonts\simhei.ttf,生成图片效果

下面再以周杰伦于2003年发行的专辑《叶惠美》为例,共收录了11首歌曲

百科地址https://baike.baidu.com/item/%E5%8F%B6%E6%83%A0%E7%BE%8E/893 近600行歌词,保存到文件 jay.txt


效果图:

 

这张专辑的主要关键词

['微笑 东风破 乒乓 弹奏 我们 骄傲 睫毛 不想 一曲 好难 得到 走过 琵琶 一天 天空 多强 画面 嘴角 到底 一直 粉嫩 偏偏 二班 回忆 永远 看不见 故事 不到 为什么 不用 沉默 外表 请原谅 从前 可不可以 孤独 水蜜桃 没有双刀 唇膏 怎么 知道 国度 刻着 一点 多汁 离开 渐渐 坠入 小孩 原地打转 仁慈 还要 清秀 自负 亮丽 受伤 没人能 我试 过握 大到 训导处 荒烟漫草 先对 我戒 那鲁湾 裁判 唐装 自己 依赖 第一名 答案 示好 石板路 专辑 喊叫 香味 枫叶 一股 舍不得 那年 温柔 放晴 自信 洋溢 雨淋 距离 俯瞰 看不惯 古道 刮风 篱笆 不要 天台 剥落琴声 纪录片 幽幽 预兆 还是']

如果你不会代码怎么生成词云呢,有许多对应的网站。

wordart

一个在线生成词云的网站 https://wordart.com/create 将文字导入进去

然后上传中文字体,否则乱码,效果如图:

国内也有对应的 http://cloud.niucodata.com/,将歌词复制进去,点击下方的导出图片,效果如下

公众号词云

这是新榜针对公众号文章的词云分析工具,可以免费使用https://data.newrank.cn/wordCloud.html ,比如我的公众号文章词云图

推荐阅读:

如何发一条空白的朋友圈

那些在国内还能使用的谷歌产品

那些你可能不知道的微信奇技淫巧

如何在豆瓣租房小组快速找到满意的房子

公众号苏生不惑原创文章整理

Chrome 浏览器扩展神器油猴

公众号:苏生不惑

扫描二维码关注


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47916
 
44 次点击  
分享到微博