加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

基于jiebaR包的周杰伦歌词文本挖掘分析

发布时间:2020-12-14 03:25:38 所属栏目:大数据 来源:网络整理
导读:作者:鲁伟 一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。个人公众号:数据科学家养成记 (微信ID:louwill12) ??? 虽然现在NLP(自然语言处理)技术那么发达,但作为一个有志于在数据科学领域内搞出点动静的年轻人来说

作者:鲁伟

一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。个人公众号:数据科学家养成记 (微信ID:louwill12)

???

虽然现在NLP(自然语言处理)技术那么发达,但作为一个有志于在数据科学领域内搞出点动静的年轻人来说,用R来做一点文本挖掘还各种出错,各种困难不断,确实是有点说不过去。前两天看到R语言中文社区分享的一个关于jiebaR包分词工具的文章,于是也想尝个鲜,便琢磨着搞个东西给大家看看。在CSDN和知乎上看到有大神拿《笑傲江湖》、《全唐诗》之类的小说和古籍来分析,想着我就用周杰伦的13张专辑的歌词来简单地做个分词和文本分析吧。

虽然是听了十几年的周杰伦,各种周氏情歌和中国风也算信手拈来,但昨天把13张专辑和十几首单曲的歌词整理成规范的txt文档也着实花了不少时间,这篇文章没做多少深度的分析,只是用杰伦的歌词基于jiebaR包做了简单的分词并用wordcloud2包做了几个词云图,在NLP和文本挖掘领域目前了解不多,但还是胡适那句话:“怕什么真理无穷尽,有一寸得一寸的欢喜!”

5分钟上手jiebaR

jiebaR是一款灵活高效的中文分词包,底层用的是C++,所以有C语言基础的同学用Rcpp包来调用可能会更方便。

jiebaR包的安装:

install.packages("jiebaR")

library(jiebaR)

先看一个例子直接上手jiebaR:

wk = worker()

wk["天青色等烟雨,而我在等你"]

[1] "天" ? "青色" "等" ? "烟雨" "而" ? "我" ? "在" ? "等" ? "你"?

wk["亲爱的爱上你从那天起甜蜜的很轻易"]

[1] "亲爱" ? "的" ? ? "爱上你" "从" ? ? "那天" ? "起" ? ? "甜蜜" ? "的" ? ?

[9] "很" ? ? "轻易" ?

也可以使用segment函数进行分词: ?

segment( "故事的小黄花,从出生那天就飘着",wk)

[1] "故事" ? "的" ? ? "小黄花" "从" ? ? "出生" ? "那天" ? "就" ? ?"飘"

[9] "着"?

以上就是jiebaR包进行分词的基本用法啦,想了解其背后的自定义操作符、项目源代码、分词引擎以及配置词典等内容的同学可以去github上稍微搜寻一下即可。

基于jiebaR的周杰伦歌词文本分析

原本以为歌词整理起来很容易,没想到着实被坑了一把。费了好大劲把全部13张专辑和单曲的歌词整理到txt中,读取的时候又各种乱码,调试了多次才得以继续做下去。

歌词准备完毕,那就开始写jiebaR分词吧。

导入jiebaR和wordcloud2包:

library(jiebaR)

library(wordcloud2)

读取歌词文档:

jc<-scan("D:/Rdata/datasets/Jaychou.txt",sep="n",what="",encoding="UTF-8")

注意sep和encoding这两个参数,很容易出现乱码,稍加注意即可。

查看表头检查下,第一首是《可爱女人》哈:

head(jc)

[1] "?《JAY》n《可爱女人》n想要有直升机 想要和你飞到宇宙去n想要和你融化在一起 融化在银河里" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

[2] "我每天每天每天在想想想想着你n这样的甜蜜 让我开始相信命运n感谢地心引力 让我碰到你n漂亮的让我面红的可爱女人" ? ? ? ? ??

[3] "温柔的让我心疼的可爱女人" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

[4] "透明的让我感动的可爱女人" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

[5] "坏坏的让我疯狂的可爱女人" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

[6] "世界这样大而我而我只是只小小小的蚂蚁n但我要尽全力全力全力保护你n《完美主义》n如果说怀疑 可以造句 如果说分离 能够翻译"

配置参数,对文本进行分词:

先看《可爱女人》的分词效果:

mixseg<-worker()

segment(head(jc),mixseg)

[1] "JAY" ? ? ?"可爱" ? ? "女人" ? ? "想要" ? ? "有" ? ? ? "直升机" ?

[7] "想要" ? ? "和" ? ? ? "你" ? ? ? "飞到" ? ? "宇宙" ? ? "去" ? ? ?

[13] "想要" ? ? "和" ? ? ? "你" ? ? ? "融化" ? ? "在" ? ? ? "一起" ? ?

[19] "融化" ? ? "在" ? ? ? "银河" ? ? "里" ? ? ? "我" ? ? ? "每天" ? ?

[25] "每天" ? ? "每天" ? ? "在" ? ? ? "想想" ? ? "想想" ? ? "着" ? ? ?

[31] "你" ? ? ? "这样" ? ? "的" ? ? ? "甜蜜" ? ? "让" ? ? ? "我" ? ? ?

[37] "开始" ? ? "相信" ? ? "命运" ? ? "感谢" ? ? "地心引力" "让" ? ? ?

[43] "我" ? ? ? "碰到" ? ? "你" ? ? ? "漂亮" ? ? "的" ? ? ? "让" ? ? ?

[49] "我" ? ? ? "面红" ? ? "的" ? ? ? "可爱" ? ? "女人" ? ? "温柔" ? ?

[55] "的" ? ? ? "让" ? ? ? "我" ? ? ? "心疼" ? ? "的" ? ? ? "可爱" ? ?

[61] "女人" ? ? "透明" ? ? "的" ? ? ? "让" ? ? ? "我" ? ? ? "感动" ? ?

[67] "的" ? ? ? "可爱" ? ? "女人" ? ? "坏坏" ? ? "的" ? ? ? "让" ? ? ?

[73] "我" ? ? ? "疯狂" ? ? "的" ? ? ? "可爱" ? ? "女人" ? ? "世界" ? ?

[79] "这样" ? ? "大而" ? ? "我" ? ? ? "而" ? ? ? "我" ? ? ? "只是" ? ?

[85] "只" ? ? ? "小" ? ? ? "小小的" ? "蚂蚁" ? ? "但" ? ? ? "我" ? ? ?

[91] "要" ? ? ? "尽全力" ? "全力" ? ? "全力" ? ? "保护" ? ? "你" ? ? ?

[97] "完美主义" "如果说" ? "怀疑" ? ? "可以" ? ? "造句" ? ? "如果说"[103] "分离" ? ? "能够" ? ? "翻译"?

对全文进行分词:

jc2<-segment(jc,mixseg)

length(jc2)#查看分词后的向量长度

[1] 35252

查看jc2的前50的词频统计:

sort(table(jc2),decreasing=T)[1:50]

在不做筛选的情况下jc2的词频统计结果都是常见的单个字,并无多少参考意义,因此我们对jc2进行筛选。

筛选字符串长度介于2-6的词并进行前50的词频统计: ?

jc3<-jc2[nchar(jc2)>1 & nchar(jc2)<7]

sort(table(jc3),decreasing=T)[1:50]

筛选字符串长度介于3-7的词并进行前50的词频统计:

jc4<-jc2[nchar(jc2)>2 & nchar(jc2)<8]

sort(table(jc4),decreasing=T)[1:50]

Hey ? What 为什么 ? come ? ?Jay 看不见 冰淇淋 ? ?you 土耳其 轻轻地 是不是?

59 ? ? 34 ? ? 26 ? ? 23 ? ? 21 ? ? 20 ? ? 17 ? ? 16 ? ? 16 ? ? 14 ? ? 14?

Girl 干什么 美人鱼 周杰伦 我爱你 来不及 ? ?Now Repeat ? ?see 舍不得 ? aMEI?

12 ? ? 12 ? ? 12 ? ? 12 ? ? 11 ? ? 10?

(贴出的一点词频统计结果比较乱,凑合着看下)

输出前100个jc4的高频统计词:

wordFreq100=sort(table(jc4),decreasing=T)[1:100]

wordFreq100?

基于jc4做一个周杰伦歌词的词云图:

????wordcloud2(wordFreq100,size = 1,shape = 'pentagon')

????

可以看出我伦对于土耳其冰淇淋是真爱哈哈,还动不动就关灯什么的。个别能上次词频统计的都是某一首歌的原因,比如说在《公公偏头痛》这首歌里面“公公他偏头痛”就重复了n次,直接导入“偏头痛”三个字上榜。至于两个词和四个词的词频和词云图在这里就省略不放了,有兴趣的同学或者是喜欢周杰伦歌的同学可以自己去试下代码哈。

最后简单看个杰伦的季节爱好:

table(jc3)["春天"]

春天?

2?

table(jc3)["夏天"]

夏天?

?9?

table(jc3)["秋天"]

秋天?

10?

table(jc3)["冬天"]

冬天?

14?

四季分明,我伦对秋天和夏天那是真爱,毕竟我伦主打忧郁冬日风。

小结

限于篇幅,关于jiebaR包的其他用法和更深入的讨论就有待各位同学自己去探索啦,这里仅仅是把我前几天的一个想法简单的实现了下,但也没有做更深入的分析,关于NLP 和R语言文本挖掘,我们都还有很长的一段路要走。


微信回复关键字即可学习

回复 R??????????? ??R语言快速入门免费视频?回复 统计??????? ??统计方法及其在R中的实现回复 用户画像 ??民生银行客户画像搭建与应用?回复 大数据??? ??大数据系列免费视频教程回复 可视化? ? ??利用R语言做数据可视化回复 数据挖掘 ? 数据挖掘算法原理解释与应用回复 机器学习 ??R&Python机器学习入门?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读