用R进行文本分析初探——以《红楼梦》为例

一.写在前面的话~

  刚吃饭的时候同学问我,你为什么要用R做文本分析,你不是应该用R建模么,在我和她解释了一会儿后,她嘱咐我好好写这篇博文,嗯为了娟儿同学,细细说一会儿文本分析。

文本数据挖掘(Text Mining)是指从文本数据中抽取有价值的信息和知识的计算机处理技术。顾名思义,文本数据挖掘是从文本中进行数据挖掘(Data Mining)。从这个意义上讲,文本数据挖掘是数据挖掘的一个分支。

文本分析是指对文本的表示及其特征项的选取;文本分析是文本挖掘、信息检索的一个基本问题,它把从文本中抽取出的特征词进行量化来表示文本信息。

  在拉勾网上搜索文本分析的相关工作,甚至还会发现专门招聘这方面人才的公司(并且大部分都是目前来说高不可攀的公司。。)。

随便进入了一个职位,看其要求:

  编程能力、文本挖掘项目经验、大规模数据处理或统计基础。。瞬间觉得自己弱爆了有木有!!

  再找一下相关的文献,不要再说文本分析和统计学没有关系啦~

  

  博主刚刚接触R语言和文本分析,所以只是试探了一下下皮毛,为了将二者结合,试着对《红楼梦》进行分析,首先对《红楼梦》进行分词处理,并统计词频,同时画出标签云。

  闲话的最后,大家一起翻译这篇文章好不好233

http://jmlr.org/proceedings/papers/v37/kusnerb15.pdf

二.利用R对《红楼梦》进行分析

(一)需要加载的包

需要用到rJava,Rwordseg,wordcloud

安装步骤:

1.安装java:

http://www.java.com/zh_CN/download/windows_xpi.jsp

2.安装rJava:

在R的命令框输入

install.packages("rJava")

错误解决方案:

错误1.错误: ‘rJava’程辑包或名字空间载入失败,
解决方案:换路径

错误2.

解决方案:

在R中输入

Sys.setenv(JAVA_HOME='C:/Program Files/Java/jre1.8.0_73') #注意:要根据你的java路径更改

3.安装Rwordseg:

下载地址:

https://r-forge.r-project.org/R/?group_id=1054

点这儿下载Rwordseg

解压后将文件放入R下library文件夹下

4.安装wordcloud

在R的命令框输入

install.packages("wordcloud")

利用Rwordseg分词包进行分词

(二)分析过程

1.基础导入

library(rJava)
library(Rwordseg)
library(RColorBrewer)
library(wordcloud)

2.读入数据

  将需要分析的文本放入记事本中,保存到相应路径,并在R中打开。这儿我导入的是《红楼梦》的文本。

lecture<-read.csv("E:/Rtagcloud/hongloumeng.txt", stringsAsFactors=FALSE,header=FALSE)

3.优化词库

  对于文言文和人物名字分词结果不是很理想的问题,有一个很好的解决方案,就是导入搜狗细胞词库(http://pinyin.sogou.com/dict/),以本例作为例子,分别导入了文言文常用词库、红楼梦常用词库、红楼梦成员名字词库,这三个词库,让分词效果更为理想。

installDict("C:\\Users\\Administrator\\Desktop\\红楼梦词汇大全.scel","hongloumeng1")
installDict("C:\\Users\\Administrator\\Desktop\\红楼梦群成员名字词库.scel","hongloumeng2")
installDict("C:\\Users\\Administrator\\Desktop\\红楼梦词汇.scel","hongloumeng3")

为了让大家更直观的理解优化词库,举如下例子:

先导入rJava和Rwordseg两个包

library(rJava)
library(Rwordseg)

利用Rwordseg对“朝辞白帝彩云间,千里江陵一日还。两岸猿声啼不尽,轻舟已过万重山。”进行分词,结果如下

接着到http://pinyin.sogou.com/dict/detail/index/22394 下载李白诗集的细胞词库,并把它放到E盘,在R中输入以下代码安装词典:

installDict("e:/李白诗集.scel","libai")

安装好后,输入同样的代码,结果如下

可见利用细胞词库可以得到更好的分词结果。

4.分词+统计词频

words=unlist(lapply(X=res, FUN=segmentCN))
#unlist将list类型的数据,转化为vector
#lapply()返回一个长度与X一致的列表,每个元素为FUN计算出的结果,且分别对应到X中的每个元素。
word=lapply(X=words, FUN=strsplit, " ")
v=table(unlist(word))
#table统计数据的频数

结果v的部分截图如下,可以看出此时已经统计好词频了:

5.对词频进行排序

# 降序排序
v=rev(sort(v))

6.创建数据框

d=data.frame(词汇=names(v), 词频=v) 

7.过滤掉1个字的结果和词频小于100的结果

  筛选标准大家可以根据自己的需求进行修改

d=subset(d, nchar(as.character(d$词汇))>1 & d$词频>=100)  

8.词频结果输出

  根据自己的具体需求改变路径和文件名称

write.csv(d, file="E:/Rtagcloud/hongloumengfcresult.csv", row.names=FALSE)

词频统计结果(节选)如下:

9.画出标签云

(1)读入词频统计数据

路径和文件名称根据自己的需求更改

mydata<-read.csv("E:/Rtagcloud/hongloumengfcresult.csv",head=TRUE)

(2)设置字体类型和字体颜色

mycolors <- brewer.pal(12,"Paired")
windowsFonts(myFont=windowsFont("锐字巅峰粗黑简1.0")) 

字体下载地址:

http://www.zhaozi.cn/

大家可以根据自己的喜好选择喜欢的字体

brewer.pal配色如下,大家可以根据喜好选择:

(3)画出标签云

wordcloud(mydata$词汇,mydata$词频,random.order=FALSE,random.color=TRUE,colors=mycolors,family="myFont")

所有代码:

library(rJava)
library(Rwordseg)
library(RColorBrewer)
library(wordcloud)
#读入数据
lecture<-read.csv("E:/Rtagcloud/hongloumeng.txt", stringsAsFactors=FALSE,header=FALSE)
#文本预处理
res=lecture[]
#分词+频数统计
installDict("E:\\红楼梦词汇大全.scel","hongloumeng1")
installDict("E:\\红楼梦群成员名字词库.scel","hongloumeng2")
installDict("E:\\红楼梦词汇.scel","hongloumeng3")
words=unlist(lapply(X=res, FUN=segmentCN))
#unlist将list类型的数据,转化为vector
#lapply()返回一个长度与X一致的列表,每个元素为FUN计算出的结果,且分别对应到X中的每个元素。
word=lapply(X=words, FUN=strsplit, " ")
v=table(unlist(word))
#table统计数据的频数
# 降序排序
v=rev(sort(v))d=data.frame(词汇=names(v), 词频=v)   #创建数据框
#过滤掉1个字和词频小于200的记录
d=subset(d, nchar(as.character(d$词汇))>1 & d$词频>=100)  #输出结果
write.csv(d, file="E:/Rtagcloud/hongloumengfcresult.csv", row.names=FALSE)   #画出标签云
mydata<-read.csv("E:/Rtagcloud/hongloumengfcresult.csv",head=TRUE)
mycolors <- brewer.pal(12,"Paired")
windowsFonts(myFont=windowsFont("锐字巅峰粗黑简1.0"))
wordcloud(mydata$词汇,mydata$词频,random.order=FALSE,random.color=TRUE,colors=mycolors,family="myFont")

以下是博主画的其它标签云(对啦对啦就是上瘾啦233):

《时间简史》

这只是很简单很简单的文本分析入门,继续努力~

用R进行文本分析初探——包含导入词库和和导入李白语句相关推荐

  1. 用R进行文本分析初探——以《红楼梦》为例

    原博地址:http://www.cnblogs.com/zzhzhao/p/5299876.html[侵删] 一.写在前面的话~ 刚吃饭的时候同学问我,你为什么要用R做文本分析,你不是应该用R建模么, ...

  2. python红楼梦人物词频统计_用R进行文本分析初探——以《红楼梦》为例

    刚刚接触R语言和文本分析,为了将二者结合,试着对<红楼梦>进行分析,首先对<红楼梦>进行分词处理,并统计词频,同时画出标签云. 其实文本分析还可以分析其它很多东西,我的下一步打 ...

  3. 安卓上利用百度输入法提供的导入词库与个性短语,批量造词方便输入

    最近有做个小APP,里面管理了很多的商品,商品名称不是常见的词,用户在会需要经常输入这些商品名称(软件外部,无法做自动补全),每次都要选词,正确的候选项往往不会出现在很前面,容易误选,输入效率较低.按 ...

  4. 上手结巴分词文本分析,输出热词、TF-IDF权重和词频

    前言 舆情分析.文本分析,在做特征提取时,需要把一整段内容合并后,提取内容中的热词.F-IDF权重和词频,本编以python编程,分享如何通过结巴分词简易上手. 代码讲解 先给代码片段配内容讲解,篇尾 ...

  5. android 常用短语的添加,操作方法:使用Android上的百度输入法提供的导入词库和个性化短语,批量创建单词便于输入...

    最近,我制作了一个小型APP,可以管理许多产品.产品名称不是一个常用词.用户经常需要输入这些产品名称(在软件外部,无法自动完成),并且每次都必须选择单词,正确的候选者通常不会出现在前面,很容易出错,并 ...

  6. python库和模块的区别_在函数中导入python库与全局导入之间有何区别?

    假设我要导入一个在函数内部使用的python库.在函数中导入库还是在全局范围内导入更好? 做这个 def test_func: import pandas as pd # code implement ...

  7. vscode 导入python库_vscode 如何导入python库

    vscode 如何导入python库 首先,我们要知道,VScode和本地运行的并不是同一个python,反正我的是这样,所以导致了在本地下载好库后,在VScode运行时还是报错.那么如何在VScod ...

  8. SIMetrix教程-005.SIMetrix导入第三方库;SIMetrix导入模型

      各种仿真软件能否导入.怎么导入第三方库是个永恒的话题.   SIMetrix安装时如果选择的是默认路径,那么软件自带库文件路径一般是C:\Program Files\SIMetrix830\sup ...

  9. ios 输入法扩展_如何给iOS系统原生输入法导入词库

    一.越狱版 1. 设置 - 通用 - 键盘 - 文本替换 随便添加一条内容,例如"nihao 你好" 2. 在 iFile 或 iFilza 根目录下搜索"CloudUs ...

  10. python怎么导入math库_python怎么导入math库?

    Python语言是通过区分类库的方式来划分功能.用户根据自身的需要加载合适的类库,来完成需要的功能.那么如何导入加载类库?下面本篇文章就来给大家以内置类库math为例,介绍加载内置类库的方法,希望对大 ...

最新文章

  1. LOJ 2537 「PKUWC2018」Minimax
  2. 如何在Mac上加入adb服务
  3. 青年歌手大奖赛_评委会打分
  4. 【微信小程序】使用Hystrix的插件机制
  5. 安卓代码还是xml绘制页面_我们应该绘制实际还是预测,预测还是实际还是无关紧要?
  6. Web框架——Flask系列之自定义过滤器详解(五)
  7. 告别10年代,这几款手机应用改变了数亿中国人的生活,你一定在用!
  8. 初次接触 Lottie
  9. DesignPattern_Java:设计模式分类和设计原则
  10. java 注册表 下载_Java修改windows注册表(完全修改)
  11. java 线程池扩容_106. 生产环境中的线程池自动扩容与缩容的动态资源分配经验...
  12. 最新400多款微信公众号小游戏源码集合 带HTML5自适应首页
  13. linux查看tongweb端口,东方通tongweb linux安装
  14. html5在线加密,HTML技巧——加密网页
  15. 攻防世界misc——flag_universe
  16. 链表C语言和C++两种方式实现
  17. 免校准的电量计量芯片_请问电能计量芯片CS5463增益如何校准?
  18. java 微信主动推送消息_java微信主动推送消息,java微信主动推送消息怎么实现?
  19. 【ORACLE】从安装ORACLE LINUX 8开始构建一个ORACLE21C的docker镜像
  20. MySQL数据库基础(1)数据库基础

热门文章

  1. 1209: 【入门】数字走向II
  2. 友情链接对网站优化有什么作用
  3. PSINS源码阅读—STIM300/GNSS组合导航
  4. 信息提取 Information Extraction
  5. win10打开计算机出现马赛克,图片有马赛克怎么去除?win10给图片去除马赛克的方法...
  6. 未来6英寸主战场,碳化硅-精密划片机
  7. Mysql——DQL(查询语句语法、格式、举例)以及全部数据库源码,复制就可实现全部功能
  8. RocketMQTemplate发送带tags的消息
  9. 记一次win7 配置Windows Update 失败,还原更改,无法进入系统
  10. QTP版“古城钟楼”---使用QTP完成微博定时发送脚本代码