基于R语言对《平凡的世界》人物进行挖掘

2021-10-06

今天这篇博文为大家讲解如何使用Rwordseg进行分词,课程中涉及两个简单的爬虫,对小说内容和人物名字分别进行爬取。在文末给出了R语言文本挖掘涉及包的安装方法。下次也使用案例为大家讲解如何使用jiebaR分词.

环境配置及R包加载

  1. Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre1.8.0_91\\')

  2. library(Rwordseg)

  3. library(tmcn)

  4. library(rvest)

  5. library(httr)

  6. library(stringr)

  7. library(tidyverse)

数据爬取

我从维普阅读网抓取了平凡的世界三部165章的全部内容.具体实施过程如下:

  • 获取各章节超链

  1. url='http://www.vipreading.com/novel-view-1222.html'

  2. r=GET(url)

  3. web=read_html(content(r, "text", encoding = "gbk"))

  4. #提取各章节章节名

  5. tname=web%>%html_nodes('ul:nth-child(1) > li>a')%>%html_text()%>%str_trim()

  6. #提取各章节的超链接

  7. thref=web%>%html_nodes('ul:nth-child(1) > li>a')%>%html_attr('href')

  8. href=str_replace(url,'novel-view-1222.html',thref)

  • 构造函数funx,使用lapply循环读取各章节的内容.

  1. funx=function(x){

  2.  rx=GET(x)

  3.  webx=read_html(content(rx, "text", encoding = "gbk"))

  4.  return(webx%>%html_nodes('.page-content > p')%>%html_text())

  5. }

  6. mytxt=lapply(href, funx)

  • 数据保存,好半天抓到的数据必须要保存一下.

  1. saveRDS(list(mytxt=mytxt,tname=tname,href=href),'D:\\PFDSJ.rds')

数据清理

我们的最终目的是从上面抓来的文中挖出一个两列的数据框,一列表示小说中出现的人名,另一列是每个人名在小说中出现的个数.

  1. #设置性名为可识别选项

  2. segment.options(isNameRecognition = TRUE)

  3. #添加字典,下面的词典可以去搜狗词胞下载

  4. installDict("D:\\常用汉语人名大全.scel", dictname ="常用汉语人名大全")

  5. installDict("D:\\新华字典第十版.scel", dictname ="新华字典第十版")

  6. listDict()

  1. segmentCN(mytxt[[2]])

人名的分词效果还是很差只能手动添加词典了,但一个一个输入是不明智,我们做了一个简单的爬虫从360个人图书馆中爬取平凡世界中的人物。

  1. #360个人图书馆中爬取平凡世界中的人物

  2. url='http://www.360doc.com/content/15/0408/11/22483181_461495582.shtml'

  3. webz=read_html(url)

  4. xx=webz%>%html_nodes('p.MsoNormal')%>%html_text()%>%str_extract('、+.{0,5}:')

  5. xx1=xx[!is.na(xx)]

  6. xx2=xx1%>%str_sub(2,(xx1%>%str_length())-1)%>%unique

  7. xx2[xx2=='地主金光亮']='金光亮'

到这里我们已经抓取了平凡世界的全部人名,但是在作品中可能还有一些口语化的称呼.例如 '少安','少平'等,为此我们把所有三字名字的性都去掉,得到口语化的称谓.

  1. xx3=xx2[xx2%>%str_length()==3]%>%str_sub(2,3)

  2. #手动添加词典

  3. insertWords(c(xx3,xx2), save = TRUE)

  4. res=unlist(segmentCN(unlist(mytxt)))%>%table%>%as.data.frame(stringsAsFactors =F)

  5. names(res)=c('词','频率')

  6. resu=res[res$词%in%c(xx3,xx2),]

  7. rownames(resu)=NULL

合并口语化称呼和真实名字的频数,例如n(孙少平)=452(孙少平)+1027(少平)

  1. name3=lapply(resu$词, function(x) xx2[xx2%>%str_length()==3][xx3==x])%>%unlist

  2. resu[resu$词%in%xx3,]$词=name3

  3. resu$词=as.factor(resu$词)

  4. result=resu%>%group_by(词)%>%summarise(n=sum(频率))%>%as.data.frame(stringsAsFactors =F)%>%

  5.  arrange(desc(n))

  6. saveRDS(list(mytxt=mytxt,tname=tname,href=href,result=result,xx2=xx2),'D:\\PFDSJ.rds')  

数据可视化

  • 谱系图

  1. re=readRDS('D:\\PFDSJ.rds')

  2. result=re$result

  3. resultx=data.frame(n=result$n,row.names = result$词,stringsAsFactors =F)

  4. windows(height = 20,width = 40)

  5. op=par(mar=c(4, 4, 1, 1))

  6. nam <- dist(resultx)

  7. wnam <- hclust(nam)

  8. plot(wnam, hang = -1,cex=0.75)

  9. (x <- identify(wnam,col='green'))

  10. par(op)

  • 云词图

  1. library(wordcloud2)

  2. wordcloud2(result,size = 0.65,

  3.           color = "random-light", backgroundColor = "black")

R语言文本挖掘常用包的安装方法

我所用的是windows10,R 3.2.0 32位的版本

  • tm

  1. install.packages('tm')

注意:安装tm包时会出现,需要载入NLP包建议使用以下代码安装

  1. source("http://bioconductor.org/biocLite.R")

  2. biocLite("NLP")

  • rJava

R语言中中文分析的软件包是Rwordseg,Rwordseg软件包依赖rJava包,rJava需要本机中有安装Java。

第一步是安装Java

请安装JDK,JRE不行。请对应机型,下载安装32位的JDK。机器里已经有JDK的也请改成32位的,不然没办法使用Rwordseg,尝试使用过64位的,不可行。 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

第二步是安装rJava

在R中加载环境,即一行代码,路径要依据你的java版本做出更改。

  1. Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre1.8.0_45\\')

之后再加载rjava包成功了。

注意:看你下载java的版本"jre1.8.0_45",另外最好下载32位的Java

  • Rwordseg

Rwordseg项目目前发布在R-forge上,所以不能直接在R或者Rstudio中用安装软件包功能。网上有说(参考http://jliblog.com/app/rwordseg): 在最新版本的R下可以直接安装:

  1. install.packages("Rwordseg", repos = "http://R-Forge.R-project.org")

如果是旧版本的R,可以通过source的方式进行安装:

  1. install.packages("Rwordseg", repos = "http://R-Forge.R-project.org", type = "source")

但是这样安装不成功。后来尝试把软件包下载到本地后,从本地安装,可行。 下载地址:http://R-Forge.R-project.org/bin/windows/contrib/3.0/Rwordseg_0.2-1.zip 下载完成后,在R或者RStudio中选择从本地zip文件安装软件包。安装完成后,加载程序包library(“Rwordseg”) 注:推荐使用本地安装,经测试前两种不稳定。

  • tmcn的安装

先打开http://r-forge.r-project.org/然后找出tmcn包下载进行本地安装 这个包花了我近2个小时,网上所有方法都有去尝试,也没能成功,最后去上面 网站下载时第一次由于网络原因,下载后的安装包有问题,导致安装时一直报错,最后又重新下载一遍才成功

  • RCurl ,XML,rjson,digest ,Rweibo安装

Rweibo的安装依赖于这四个包,这四个报依赖于bitops,这四个包是装的最顺利的四个包,不多说了直接上代码:

  1. install.packages("bitops")

  2. install.packages("~/Downloads/RCurl_1.95-4.1.tar", repos=NULL, type="source")

  3. install.packages("~/Downloads/XML_3.98-1.1.tar", repos=NULL, type="source")

  4. install.packages("~/Downloads/rjson_0.2.13.tar", repos=NULL, type="source")

  5. install.packages("~/Downloads/digest_0.6.4.tar", repos=NULL, type="source")

  6. install.packages("~/Downloads/Rweibo_0.2-9.tar", repos=NULL, type="source")

以上代码若不能正确运行,请用下面的方法

  1. source("http://bioconductor.org/biocLite.R")

  2. biocLite("XML")

  3. biocLite("rJson")

  4. biocLite("digest")

  5. biocLite("RCurl")

  6. biocLite("Rweibo")


推荐阅读








更多微课请关注【数萃大数据】公众号,点击学习园地—可视化

欢迎大家关注微信公众号:数萃大数据

课程公告

网络爬虫与文本挖掘培训班【宁波站】

时间:2017年9月23日-25日

地点:维也纳国际酒店(机场店)

更多详情,请扫描下面二维码


相关文章

《我的世界》中国版四月首测 免费下载

2021-10-06
看来,《我的世界》中国版的免费下载,对于支持正版的玩家是个喜大普奔的消息,也相信支持正版将是大多数玩家未来必然的选择....

《我的世界》公测两日破千万,不止是开放式游戏,网易本身也在制定“开放式”策略

2021-10-06
抢先上线iOS平台的《我的世界》手游,两日内便斩获App Store中iPhone和iPad免费下载总榜双榜第一,上线仅半个月便获得9月iOS...

中国版《我的世界》PC版测试7月14开启 限号不删档

2021-10-06
在玩家的期盼下,《我的世界》中国版再次迎来重磅消息,网易宣布将于7月14日开启PC Jave版限号不删档测试,更多玩家将体验到...

我的世界这些年悄悄变化的7个译名 什么时候加入的绵羊?

2021-10-06
我的世界1.12.2 Hungering Darkness Mod下载- 更多有趣内容可以访问Minecraft中文站分享,点赞,在看,安排一下?

我的世界特色城门集合 SERVER PORTAL PACK 地图下载

2021-10-06
我的世界基岩版更新向java版靠拢 指令可让时光倒流- 我的世界基岩版 Beta 1.17.30.25 发布 修复了游戏中可能出现的崩溃- 更多有趣内...

《我的世界》中国版PC版不限号测试 8月8日正式开启

2021-10-06
8月8日14点,《我的世界》中国版正式开启PC Java版不限号测试.对于这款风靡全球的沙盒游戏,国内玩家不必付费购买游戏,也无...

我的世界1.17.1预制建筑 Prefab Fabric MOD下载

2021-10-06
- 我的世界Java版 21w37a 发布 添加了噪声洞穴和含水层等- 更多有趣内容可以访问Minecraft中文站分享,点赞,在看,安排一下?

火遍全球的自由沙盒游戏「我的世界」中国版全平台公测正式开启 | App Store首发次日双榜第一

2021-10-06
“在已上线的《我的世界》PC Java版和iOS版中,已有几百位开发者为中国版提供内容,其中包括花雨庭、梦之边缘、梦世界服务器...

我的世界1.17.1 Corail的回收站 Corail Recycler Mod下载

2021-10-06
附魔剥离模组下载https://www.geekhoop.com/2646.htmlMinecraft iOS国际版Minecraft 安卓国际版- 我的世界1.18的隐藏更新 Java版将...

我的世界:只要足够无聊就能破MC的吉尼斯纪录,熬夜玩游戏也算!

2021-10-06
玩《我的世界》也能拿到吉尼斯纪录,而且难度并不高,只要你足够无聊便能轻松打破纪录!比如下面这位熬夜拿到MC长跑纪录保持...

随机推荐

音乐人玛莉羊羊:可爱、梦魇、自信、创伤、优美、另类,这都是我 | 别任性 x CHINESE MuseGirls

2021-06-02
别任性 047 | 音乐人玛莉羊羊:可爱、梦魇、自信、创伤、另类,这都是我欢迎来到播客《 别任性 》的第 47 期.#CHINESE ...

《Qt Creator快速入门》

2021-06-01
书籍简介 qt creator快速入门 第3版是一本基于Qt5.6.1而编著的Qt Creator入门书籍,由霍亚飞编著.本书讲解了QML语言、QtQuick编...

河南新华微课堂DIV CSS 网站导航条制作

2021-04-13

45道CSS基础面试题(附答案)

2021-04-09
阐述一下CSS Sprites将一个页面涉及到的所有图片都包含到一张大图中去,然后利用CSS的 background-image,background- repeat,...

理想终端工具 | SecureCRT

2020-12-04
为什么说是SecureCRT理想终端工具,它满足了我想要的功能,极大的提高了工作效率. SecureCRT是一款支持SSH的终端仿真程序...

疑似MUSTANG PANDA PLUGX新插件CRIMSONIAS出没

2019-09-22
CrimsonIAS为Delphi编程语⾔开发的后⻔程序.能够上传,下载⽂件及执⾏指令.虽然功能相对单⼀,但已满⾜作为RAT的基础要求,...

apktool重新打包时报错

2019-08-03
就需要反编译-修改内容-重新签名打包.然后在重新打包的时候,报错了..不能生成新的apk...由于试了很多方法都解决不了(卡...

【图文】二进制、十六进制、十进制在PLC编程中的应用,学PLC必备~

2017-07-25
计算后的结果又由二进制转换成十进制,这都由操作系统自动完成,并不需要人们手工去做.人们通常采用的数制有十进制二进制、八...

幼儿园舞蹈 《C哩C哩-》《学猫叫》,好可爱!

2017-01-27
《学猫叫》《C哩C哩》 猜你喜欢(点击进入)1幼儿园管理资料大全2普惠性幼儿园认定申请资料大全3奥尔夫音乐课程大全优质公众...

编译原理教程笔记整理

2015-06-04
编译的例子 2.1 翻译:把一种语言翻译成另一种语言.编译:把源文件转换成目标文件(中间文件),然后输出结果...