R语言-用R眼看琅琊榜小说的正确姿势
目次零:写在前面的一些空话 一、R眼看琅琊榜的根基道理 1、导入数据 2、筛选数据 3、多条件筛选对话 4、导出数据 二、R眼看琅琊榜的基本阐明 1、快速对文天职章节 2、快速定位人物进场章节 3、快速定位人物互动章节 三、总结
零:写在前面的一些空话最近电视剧琅琊榜很是之火,除了主角以外,内里许多副角都很是出彩。原著琅琊榜也长短常出色的。有些电视剧里没明说的理会,在小说里会明文说出来,这让智商不足的楼主终于看懂了电视剧里各个对话的寄义。不外小说有些太长,作者很是喜欢铺设伏笔以及涉及多小我私家物,假如想只看一小我私家可能一个集体的活时,很是坚苦。然后楼主偶尔间想到了R语言的文本挖掘项目,试着用readLines读入了小说全文,一个新的世界打开了。综上,本文以一个伪措施员+伪数据阐明的角度,讲一下用R语言读琅琊榜的一些故事。这个也可以用于今后做一些念书条记和线索整理。
一、R眼看琅琊榜的根基道理导入数据/筛选数据/导出txt或html文件1、导入数据首先,我们要从R语言官方网站下载R语言措施本体。然后把小说全文储存在一个txt文档里。利用ReadLines读入所有文本。#readLines内里放的是txt地点text<-readLines(“D:/琅琊榜/LangYaBang.txt”)text<-text[nchar(text)!=0]#预览一下:
可以看到,用readLines读入txt后,R会帮我们把小说文档按空行分段,生生长达20000多的文本向量,而这个就是我们用来做文本整理的主要质料。
2、筛选数据接下来,我们就可以抓取一些数据来看了。在写作规模,有一本书叫做《你的脚本逊毙了》,第43个能力里有提到,要塑造大好人物,写好任务的对白时,在A-B对话时,要拼了老命去想A的对话,直到在脑筋里听到他的声音,抓住了他的措辞特点,再去想B的对话。而在写作时,担保每一小我私家的发言都带着他独占的特点,在塑造人物上很是重要。所以,要阐明琅琊榜小说人物特点,我们可以先试试把人物对话摘出来。
简朴阐明小说文本,我们会发此刻琅琊榜小说里,对话根基都是用双引号“”括起来的。我们只需要用grep,就能很等闲把这些对话提取出来,代码示譬喻下:#要领1:用grepl出TRUE/FALSE,再与直接储存的text比较提取conversation<-text[grepl(““|””,text)]#要领2:用grep直接看对话结果conversation_temp<-grep(““|””,text,value=TRUE)
#取个样本看看conversation[sample(1:length(conversation),14)]
查察一下数据。
恩,用双引号确实把我们需要的对话都摘了出来,存在了conversation变量内里。
3、多条件筛选对话此刻,我们增加一些条件,再继承筛选一下。譬如说,我们看了电视剧,对能让飞流避之不及的蔺晨很是感乐趣,想看看飞流与蔺晨的互动,我们可以用以下代码:feiliu_linchen<-text[grepl(“飞流”,text)&grepl(“蔺晨|阁主|蔺大令郎”,text)]#随机选几个样本看看feiliu_linchen[sample(1:length(feiliu_linchen),20)]
R此刻自动帮我们把段落里又呈现蔺晨,又呈现飞流的片断抓了出来。一个很有意思的点是,在小说前期蔺晨没有呈现时,梅长苏已经多次提到说,飞流,你想不想蔺晨哥哥啊,飞流,你忘了蔺晨哥哥怎么教你的啊,等等等等。固然飞流已经很听苏哥哥的话了,可是从这些对话里我们会发此刻教诲飞流方面,蔺晨哥哥照旧呈现得很是频繁的。就更别提等小说后期蔺晨到金陵今后,他们天天鸡飞狗走,你追我赶的糊口了。
那么,我们可以继承凭据各类逻辑,把我们想看的都找出来。简朴来说就是,grepl(“条件”,要筛选的字符串向量)。”条件“这里,我们可以用“ | ” 把两个有OR干系的中文字符脱离开,譬如grep(“靖王|景琰|水牛”,text,value=TRUE),会把段落里含有靖王可能景琰可能水牛这样的字样全部摘选出来。
可是一个条件只能有OR的干系。假如要并列查找,则需写多个grepl,譬如text[grepl(“靖王殿下”,text) & grepl(“梅长苏”,text)]假如在grepl前加一个”!”号,则暗示去除所有有某个字段的段落,举譬喻:text[(!grepl(“靖王”,text) )&grepl(“景琰”,text) & grepl(“梅长苏”,text) & grepl(““|””,text)]这一段,只会给你找出,是对话(看最后一个grepl条件),有”景琰“和”梅长苏“呈现,但不呈现“靖王”的段落。
详细的用法可以搜索网上各类“R语言 grepl 正则表达式”等要领。下面提供一些代码示例。#示例1: 飞流与靖王殿下的所有互动text[grepl(“飞流”,text)&grepl(“靖王|景琰”,text)]
#示例2:飞流与梅长苏的互动对话conversation[!grepl(“梅长苏”,conversation) & grepl(“飞流”,conversation)]
#示例3:梅长苏提及靖王殿下时的对话text[grepl(“靖王殿下”,text) & grepl(“梅长苏”,text)& grepl(““|””,text)]#p#分页标题#e#
综上,依据这些,我们就可以把想要的文段摘选出来一一浏览了。
4、导出数据可是摘选出来还不足,有时候我们会但愿可以把它导出到当土地,像txt可能html那样生存起来。R提供了write函数,可以导出字符串为txt文件,可能直接生成html。请看示例:景琰_梅长苏<-text[(!grepl(“靖王”,text) )&grepl(“景琰”,text) & grepl(“梅长苏”,text) & grepl(““|””,text)]#导出为txt文件:write(景琰_梅长苏,”D:/琅琊榜/景琰&梅长苏.text”)#接下来,导出html。#需要把段落与段落之间加上html分行代码,不然导出来的文字会密密麻麻挤在一起html_1<-paste(景琰_梅长苏,collapse = “<br></br>”)write(html_1,”D:/琅琊榜/景琰&梅长苏.html”)这里我存在了D盘琅琊榜文件夹里,运行代码看看,文件已经放在D盘里了~~这样的功效,就可以简朴分享给其他人看。
二、R眼看琅琊榜的基本阐明1、快速对文天职章节做完上面这一步,我们来聊聊剧情。剧情是由人物而发动的。固然我们看的小说,往往都有章节的内容,但有时候只看标题,真的很难确定这个章节的内容。我们先对琅琊榜小说按章节分拆。涉及一些其他函数,各人直接看代码吧#grep,用.取代任何一个字符章节名<-(grep(“第.卷”,text,value=TRUE))章节分段<-c(grep(“第.卷”,text),length(text)+1)#建设一个文件夹,放分好段的章节dir.create(“D:/琅琊榜/章节分段”,recursive=TRUE)#接下来写一个轮回,会把所有章节储存在一个list里,同时生成相对应的txt文件分段章节<-list()for (i in 1:(length(章节分段)-1)){ data<-text[章节分段[i]:章节分段[i+1]-1] 分段章节[[i]]<-data names(分段章节)[i]<-章节名[i] write(data,paste0(“D:/琅琊榜/章节分段/”,i,”-“,章节名[i],”.txt”))}打开文件夹看看,所有章节都已经储存起来了。
然后我们也获得了一个叫做“分段章节”的list,内里储存了所有的分段数据。
2、快速定位人物进场章节好了,源数据处理惩罚好,我们可以开始做一下阐明白。这里我们主要用到的是R内里的sapply函数,尚有前文所先容的grepl要害代码如下:sapply(分段章节,function(e) sum(grepl(“梅长苏”,e)))#首先,我们读入想要的人物数据。这里可以用前文提到的”|”来指代其他称号。
脚色<-c(“梅长苏|梅宗主|苏哲|苏先生|江左梅郎”,”靖王|景琰|水牛”,”林殊|小殊”,”飞流”,”蔺晨|阁主”,”蒙挚|蒙大管辖”,”霓凰|郡主”,”景睿”,”豫津|浴巾”,”穆青|穆小王爷”,”梁王|天子|陛下”,”静妃|静嫔|静贵妃”,”言侯|言阙”,”夏冬|冬姐”,”甄平”,”黎纲”,”誉王|景桓”,”赤焰”,”列战英|战英”,”大梁”,”谢玉|谢侯”,”滑族”,”夏江”,”公主”)
#其次,建设用来储存脚色信息的文件夹dir.create(“D:/琅琊榜/脚色”,recursive=TRUE)
#然后写一个轮回,用我们方才提到的函数,去写一段代码,把统计数据写入脚色统计data.frame来。
脚色统计<-data.frame(卷名=names(分段章节))#轮回开始for (a in 1:length(脚色)){脚色统计[,a+1]<-sapply(分段章节,function(e) sum(grepl(脚色[a],e)))names(脚色统计)[a+1]<-脚色[a]#计较好章节个数后,导出相应文件为HTMLoutput<-text[grepl(脚色[a],text)]output<-paste(output,collapse = “<br></br>”)filename<-(strsplit(脚色[a],”\\|”))[[1]][1]write(output,paste0(“D:/琅琊榜/脚色/”,filename,”.html”))}write.csv(脚色统计,”D:/琅琊榜/脚色统计.csv”)好了,运行整段代码,在D:/琅琊榜/脚色/这里,我们就能看到把小说拆分成若干个小片断的HTML
这样子,想要回首个体人物的情节很利便,然后假如想要看哪个章节呈现该人物对话最多,打开琅琊榜目次下的脚色统计,就都有了举个例子,看下图吧,靖王殿下第一次进场在第16章,然后第7章应该是飞流的主场。
这样子凭据呈现段落数来找相应的章节,回首起来就越发利便了!我们还可以对它做一个连系,譬如说选出“梅长苏”与“靖王”进场次数都许多的章节,如17章,正好就是“麒麟择主”。各个连系着来看,想看什么人物对决,只要看这张表,也就可以了。有了这样规整的一张数据表,就是想做一些数据阐明啊,画一些人物图啊等等,都很是利便。
3、快速定位人物互动章节下面我们改一改上面的代码,专门来看那些有交手的干系。请看代码示例:dir.create(“D:/琅琊榜/互动with梅长苏/”,recursive=TRUE)互动with梅长苏<-data.frame(卷名=names(分段章节))for (a in 2:length(脚色)){ 互动with梅长苏[,a]<-sapply(分段章节, function(e) sum( grepl(脚色[a],e) & grepl(脚色[1],e))) names(互动with梅长苏)[a]<-脚色[a] output<-text[grepl(脚色[a],text)& grepl(脚色[1],text)] output<-paste(output,collapse = “<br></br>”) filename<-(strsplit(脚色[a],”\\|”))[[1]][1] write(output,paste0(“D:/琅琊榜/互动with梅长苏/梅长苏with”,filename,”.html”))}write.csv(互动with梅长苏,”D:/琅琊榜/互动with梅长苏.csv”)
三、总结用到的R的常识点主要包罗: 1、选取数据的要领:grepl/grep 2、统计数据的要领:sapply 3、多条件筛选: | 与&的选择,尚有!grepl 4、导出:write输出txt/html的要领 5、轮回:for轮回这个要领,不只仅可以用于琅琊榜,也可以同理推广到其他各类小说文献,甚至用来做讲义里的专业术语搜索。适公道清思路,梳理纹路。
而这一切,只需要我们会写一点点的小R,然后脑洞稍微开大一点,就都可以做到啦。至于更深条理的,譬如研究人员喜欢做的热词阐明,文本挖掘,甚至写作习惯阐明,只要有思路,也是可以继承往下做下去的。不外留意的是,在中文分词方面,好像R这方面的包没有python来得痛快。假如然的涉及到分词啊什么的,列位可以每种都去看看。可是对付小说来说,我们抓住人物和场景去厘清线索,也或许就够了。不说了,看剧去~~~
最后提供一下压缩包给那些不想玩代码的人……http://vdisk.weibo.com/s/o_UNVWLckhL
接待插手本站果真乐趣群贸易智能与数据阐明群乐趣范畴包罗各类让数据发生代价的步伐,实际应用案例分享与接头,阐明东西,ETL东西,数据客栈,数据挖掘东西,报表系统等全方位常识QQ群:81035754