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

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

发布时间:2020-12-14 03:26:41 所属栏目:大数据 来源:网络整理
导读:本文原创首发于公众号 ?数据科学家养成记 (微信ID:louwill12),作者 ?鲁伟,经作者授权转载,禁止二次转载。 ? ?? 虽然现在NLP(自然语言处理)技术那么发达,但作为一个有志于在数据科学领域内搞出点动静的年轻人来说,用R来做一点文本挖掘还各种出错,


本文原创首发于公众号 ?数据科学家养成记 (微信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,62); line-height: 25.6px; white-space: normal;">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),62); line-height: 25.6px; white-space: normal;">筛选字符串长度介于3-7的词并进行前50的词频统计:

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

sort(table(jc4),62); line-height: 25.6px; white-space: normal;">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语言文本挖掘,我们都还有很长的一段路要走。


鲁伟,个人公众号:数据科学家养成记 (微信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?十张图看懂未来的大数据世界

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

(编辑:李大同)

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

    推荐文章
      热点阅读