R语言文本挖掘朱自清写《匆匆》时的情感状态
Posted 数据分析挖掘与算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言文本挖掘朱自清写《匆匆》时的情感状态相关的知识,希望对你有一定的参考价值。
文本挖掘就是要从大量的文字中找出隐含的信息、模式。那么首先我们需要将文本分词然后进行转化成计算机可以进行识别计算的数字,这里介绍在R中常用的分词方法。
一、Rwordseg
Rwordseg是一个R环境下的中文分词工具,使用rJava调用Java分词工具Ansj。所以计算机必须安装了Java并配置好了环境变量,网上都有教程,两步即可配置好的。
1、包的下载与安装
>install.packages('rJava')
>library(rJava)
Rwordseg包在Rstudio里面下载可能会失败,可以去官网下载放到R安装目录(比如:D:Program FilesRlibrary)下面,然后安装即可
>library(Rwordseg)
2、分词
> test<-'我是十堰人'
> segmentCN(test)
[1] "我" "是" "十堰" "人"
显然被分成了一个一个的词语
当然也可以向词典中加入自定义词,比如我想让“我是”作为一个词
> insertWords('我是')
> segmentCN(test)
[1] "我是" "十堰" "人"
显然,向词库中加入自定义词“我是”后,就不会把“我是”分成两个词了。
那么,如果下次又想把“我是”分成两个词呢,可以把加入词库的词删除,以下命令:
> deleteWords('我是')
> segmentCN(test)
[1] "我" "是" "十堰" "人"
可以看出从词库中把“我是”删除后,“我是”又被当作两个词了。
3、人名识别设置
> getOption("isNameRecognition")
[1] FALSE
> segment.options(isNameRecognition = TRUE)
4、安装词典
(1)、installDict(dictpath, dictname,dicttype = c("text", "scel"), load = TRUE)
dictname 是自定义词典的名称(英文);
dicttype 默认是txt;
load 表示安装后是否自动加载到内存,默认是TRUE;
(2)、listDict() 显示安装的词典;
uninstallDict() 删除安装的词典;
(3)、如果这是在内存中临时添加或删除词汇,可以使用insertWord()和deleteWord()函数;
5、下面对朱自清的《匆匆》画词云进行文本挖掘
(1)、导入词云包
>library(wordcloud)
(2)、分词
#读入文本数据
mydata<-readLines('C:\Users\26015\Desktop\test.txt')
#中文分词
insertWords('朱自清')
txt<-segmentCN(mydata)
#将列表转化为向量
txt<-unlist(txt)
(3)、词频统计
#词语统计
txt_fre<-table(txt)
#频数排序
txt_result<-txt_fre[order(txt_fre)]
(4)、画词云
#画词云
wordcloud(names(txt_result),txt_result,random.order=FALSE)
取前150位画词云
wordcloud(names(txt_result)[1:150],txt_result[1:150],random.order=FALSE)
下面是没有去停用词的词云,“的”被突出重点,显然文本挖掘失败。所以就要去停用词再画词云。
(5)、去停用词
#导入停止词表,这里用的中科院的停用词库
stopword<-read.table('F:\我的资料\数据挖掘\中文分词词库整\四川大学机器智能实验室停用词库.txt')
#去除词语统计中的停止词
word_pure<-setdiff(names(txt_result),stopword)
#取出非停止词
txt_pure<-txt_result[word_pure]
(6)、画词云
#画词云
wordcloud(names(txt_pure)[1:150],txt_pure[1:150],random.order=FALSE)
可以看出“八千多”,“但是”,“啊”,“被”,“薄雾”都是一些有消极行为的词,反映了作者因时间而发自内心的焦虑,郁闷。
二、结巴分词
"结巴"中文分词的R语言版本,支持最大概率法,隐式马尔科夫模型,索引模型,混合模型,共四种分词模式,同时有词性标注,关键词提取,文本Simhash相似度比较等功能。项目使用了Rcpp和CppJieba进行开发。
1、包的下载与安装
>install.packages('jiebaRD')
>install.packages('jiebaR')
> library(jiebaRD)
> library(jiebaR)
2、分词
#建立分词引擎
> test<-'我是十堰人'
> seg<-worker()
#“<=”分词运算符
> seg<=test
[1] "我" "是" "十堰" "人"
与下面这句效果一样
> segment(test,seg)
[1] "我" "是" "十堰" "人"
3、下面用朱自清的《匆匆》进行全文分词,只为简单说明结巴分词的用法:
(1)、首先读入文件
> test<-readLines('C:\Users\26015\Desktop\test.txt')
建立分词引擎
> seg<-worker()
分词
> segment(test,seg)
分词结果不错
(2)、词性标注
可以使用 <=.tagger 或者 tag 来进行分词和词性标注, 词性标注使用混合模型模型分词,标注采用和 ictclas 兼容的标记法。
>seg<-woker('tag')
> test<-'我是十堰人'
> segment(test,seg)
r v ns n
"我" "是" "十堰" "人"
(3)、关键词提取
关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,使用方法与分词类似。topn参数为关键词的个数,这里只提取一个关键词:
>test<-'我是中国人'
> seg2<-worker('keywords',topn = 1)
> segment(test,seg2)
3.02732
"中国"
(4)、Simhash 与海明距离
对中文文档计算出对应的simhash值。simhash是谷歌用来进行文本去重的算法,现在广泛应用在文本处理中。Simhash引擎先进行分词和关键词提取,后计算Simhash值和海明距离。
>test<-'生长在中国我是中国人'
> seg3<-worker('simhash',topn = 2)
> segment(test,seg3)
$simhash
[1] "1230302202452102883"
$keyword
6.19542 6.05464
"生长" "中国"
超值课程,限时特价,点击【阅读原文】即可获得!
以上是关于R语言文本挖掘朱自清写《匆匆》时的情感状态的主要内容,如果未能解决你的问题,请参考以下文章