基于jiebaR包的周杰伦歌词文本挖掘分析
作者:鲁伟 一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。个人公众号:数据科学家养成记 (微信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上稍微搜寻一下即可。 基于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语言文本挖掘,我们都还有很长的一段路要走。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |