​​​​ Python 词云分析周杰伦新歌《说好不哭》 | 苏生不惑的博客

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

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

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

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

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

词云

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

歌词

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
没有了联络 后来的生活
我都是听别人说
说你怎么了 说你怎么过
放不下的人是我
人多的时候 就待在角落
就怕别人问起我
你们怎么了 你低着头
护着我连抱怨都没有
电话开始躲 从不对我说
不习惯一个人生活
离开我以后 要我好好过
怕打扰想自由的我
都这个时候 你还在意着
别人是怎么怎么看我的
拼命解释着
不是我的错 是你要走
眼看着你难过
挽留的话却没有说
你会微笑放手
说好不哭让我走
电话开始躲 从不对我说
不习惯一个人生活
离开我以后 要我好好过
怕打扰想自由的我
都这个时候 你还在意着
别人是怎么怎么看我的
拼命解释着
不是我的错 是你要走
眼看着你难过
挽留的话却没有说
你会微笑放手
说好不哭让我走
你什么都没有
却还为我的梦加油
心疼过了多久
过了多久
还在找理由等我

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

wordcloud

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import jieba,wordcloud
from snownlp import SnowNLP
import jieba.analyse
from 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图片效果:

image.png
改变下尺寸效果
image.png

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

接着用SnowNLP对每个句子分析,先pip install SnowNLP安装,sentiments 返回值为正面情绪的概率,越接近1表示正面情绪,越接近0表示负面情绪。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
s = SnowNLP(mytext)
# for sentence in s.sentences:
# print(sentence)
# sentc = SnowNLP(sentence)
# print(sentc.sentiments)
>>> s.sentiments
0.9875230187654408
说明这首歌是偏正面的。
sentimentslist = []
s = SnowNLP(data)
for sentence in s.sentences:
s = SnowNLP(sentence)
sentimentslist.append(s.sentiments)
plt.hist(sentimentslist, bins = np.arange(0, 1, 0.01), facecolor = 'g')
plt.xlabel('Sentiments Probability')
plt.ylabel('Quantity')
plt.title('Analysis of Sentiments')
plt.show()
>>> s.summary(limit=10) 摘要
['我都是听别人说', '不习惯一个人生活', '不习惯一个人生活', '说好不哭让我走', '说好不哭让我走', '都这个
时候 你还在意着', '都这个时候 你还在意着', '电话开始躲 从不对我说', '电话开始躲 从不对我说', '挽留的话却没有说']
>>> s.keywords(limit=10)
['说', '不', '还', '人', '都', '别人', '生活', '却', '走', '一个']

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,生成图片效果
image.png
然后加个白色背景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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)
# print (wordStr)
#怎么 别人 挽留 打扰 放手 说好 在意 没有 从不 拼命 难过 多久 眼看 生活 微笑 好好 时候 习惯 自由 电话 解释 离开 的话 护着 放不下 加油 以后 问起 人多 角落 心疼 低着头 抱怨 开始 不是 联络 这个 理由 一个 后来 你们 什么
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') # 是否显示x轴、y轴下标
ax = plt.imshow(my_cloudword) # 显示词云图
fig = ax.figure
fig.set_size_inches(25,20) # 可调节图片紧密 尺寸程度
plt.show() # 显示

stopwords = set(STOPWORDS)
handle('jay.txt', stopwords)

效果图
image.png

一首歌可能还看不出效果,下面以周杰伦于2003年发行的专辑《叶惠美》为例,共收录了11首歌曲 image.png

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

image.png
image.png

前50
image.png

前100
image.png

这张专辑的主要关键词

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

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

wordart

一个在线生成词云的网站https://wordart.com/create 将文字导入进去
image.png
上传中文字体,否则乱码,效果如图:
image.png

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

公众号词云

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

资源

$ pdftotext mydocument.pdf - | wordcloud_cli –imagefile wordcloud.png
http://duososo.com/index.php
自然语言处理库之snowNLPhttps://www.jianshu.com/p/4692d1b5364d
超简单:3分钟制作惊艳的词云图
https://worditout.com/
https://www.weiciyun.com/create.html
https://wordart.com/
js版 https://wordcloud2-js.timdream.org/#love https://github.com/timdream/wordcloud
评论爬虫及情感分析https://www.itcodemonkey.com/article/10706.html
基于SnowNLP的豆瓣评论情感分析https://blog.csdn.net/Eastmount/article/details/85118818
https://bosonnlp.com/dev/resource
在线词云http://ictclas.nlpir.org/nlpir/
情感分析库比较https://www.ctolib.com/article/compares/1874
词云https://github.com/mukund109/word-mesh
将公众号所有文章出现最多的关键词并生成词云图 https://mp.weixin.qq.com/s/HF1f2DNd3u49vUM1b13DAw
https://github.com/isnowfy/snownlp
https://www.zhihu.com/question/24658552
https://zhuanlan.zhihu.com/p/21635987
https://minitagcloud.cn/create.html#/
https://www.jianshu.com/p/4fb27471295f
http://yciyun.com/
http://www.pullword.com/
https://minitagcloud.cn/
http://cloud.niucodata.com/
https://web.geekji.cn/web/minitagcloud.html
10行python代码的词云 http://python.jobbole.com/87496/
https://amueller.github.io/word_cloud/
黑科技 https://magnet.chongbuluo.com/forum-47-1.html
词云https://me.bdp.cn/home.html
http://www.picdata.cn
http://www.tocloud.com
WordArt.com
Tagxedo.com
WordItOut.com
Wordle.net
https://www.bilibili.com/video/av53917673
http://codewithzhangyi.com/2018/09/03/NLP%E7%AC%94%E8%AE%B0-Word-Tokenization-wordcloud/
http://codewithzhangyi.com/2019/03/11/sentiment-analysis/
文本分析朱自清写《匆匆》的情感状态 https://mp.weixin.qq.com/s/dOpKU0i65c5KJaxsiFWoCg
Python 词云分析周杰伦《晴天》https://mp.weixin.qq.com/s?__biz=MzIyMjg2ODExMA==&mid=2247483695&idx=1&sn=a04f03641ce7b73f130d2a3f134824c5&scene=19
词云可视化:四行Python代码轻松上手到精通 https://github.com/TommyZihao/zihaowordcloud
https://1315402725.github.io/python%E6%96%97%E7%BD%97%E5%A4%A7%E9%99%86%E8%AF%8D%E4%BA%91.html
周杰伦《说好不哭》新歌MV隐藏彩蛋 你发现了吗 https://www.onefm.com.my/%E5%91%A8%E6%9D%B0%E4%BC%A6%E3%80%8A%E8%AF%B4%E5%A5%BD%E4%B8%8D%E5%93%AD%E3%80%8B%E6%96%B0%E6%AD%8Cmv%E9%9A%90%E8%97%8F%E5%BD%A9%E8%9B%8B-%E4%BD%A0%E5%8F%91%E7%8E%B0%E4%BA%86%E5%90%97%EF%BC%9F/
推荐阅读:

如何发一条空白的朋友圈

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

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

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

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

Chrome 浏览器扩展神器油猴
免费星球

公众号:苏生不惑

扫描二维码关注