首页 > 精选 > 基于jiebaR包的周杰伦歌词文本挖掘分析

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


本文原创首发于公众号  数据科学家养成记 (微信ID:louwill12),作者  鲁伟,经作者授权转载,禁止二次转载。


    


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


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



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上稍微搜寻一下即可。



原本以为歌词整理起来很容易,没想到着实被坑了一把。费了好大劲把全部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)["春天"]

春天 

table(jc3)["夏天"]

夏天 

table(jc3)["秋天"]

秋天 

10 

table(jc3)["冬天"]

冬天 

14 

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



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


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


近期精彩活动(直接点击查看):

福利 · 阅读 | 免费申请读大数据新书 第20期


END


投稿和反馈请发邮件至holly0801@163.com。转载大数据公众号文章,请向原文作者申请授权,否则产生的任何版权纠纷与大数据无关。

大数据


为大家提供与大数据相关的最新技术和资讯。


长按指纹 > 识别图中二维码 > 添加关注


近期精彩文章(直接点击查看):

161224 2016年“大数据”产业的“真实面目” 

161222 傅盛:深度学习是一种新的思维方式 

161216 CCF:2017年大数据发展趋势报告及解读

161213 一文看懂人工智能:原理,技术和未来

161208 如何七周成为数据分析师

161206 一篇文看懂Hadoop:风雨十年,未来何去何从

161205 2017年大数据的十大发展趋势

161129 大数据等最核心的关键技术:32个算法

161126 2016十大热门大数据岗位,拿走不谢

161122 2017年关于数据科学六大预言

161119 漫画:什么是机器学习? 

161114 终年32岁的传奇数学家,生前寂寂无闻,一个世纪后却让硅谷领袖们集体落泪致敬

161112 如何用大数据思维找女朋友?

161108 漫画:什么是大数据

161107 数据可视化的七大秘密

161105 Gartner公布2017年十大战略科技发展趋势 

161028 经验贴│怎样进行大数据入门级学习

161025 干货:数据分析师的能力和工具体系

161023 不装逼地说,在Google十年,到底学到啥? 

161016 大数据投资人必读:中国大数据发展与投资分析报告

161014 您的位置信息如何被利用?——基于位置信息的应用和地理信息匹配算法

161009 硅谷教父凯文·凯利最新预言:未来20年最重要的2个科技趋势! 

161001 十张图看懂未来的大数据世界

更多精彩文章,请在公众号后台点击“历史文章”查看,谢谢。

友情链接