R语言文本分析问题
1、加载包
#调入分词的包
library(Rwordseg)
library(rJava)
#调入绘制词云的包
library("RColorBrewer")
library("wordcloud")
“Rwordseg”在分词之前会去掉文本中所有的(中文)符号,这样就会造成原分开的句子前后相连,本来分开的两个字也许连在了一起。
另外一个中文分词包“jieba”分词包不会去掉任何符号,而且返回的结果里也会有符号。所有小文本准确性上可能”Rwordseg”会有误差。
Rwordseg分词原理:
Rwordseg是一个R环境下的中文分词工具,使用rjava调用Java分词工具Ansj。
2、载入本地词典,可先从搜狗词库官网下载所需的词库,然后再载入
词典支持普通格式的文本词典和搜狗的secl格式的细胞词典。
(1) 安装词典
installDict(dictpath, dictname,dicttype = c("text", "scel"), load = TRUE)
dictname 是自定义词典的名称(英文)
dicttype 默认是txt
load 表示安装后是否自动加载到内存,默认是TRUE
installDict("F:/大数据/R文本分析/词库/常用词语.scel","常用词语")
(2) listDict() 显示安装的词典
(3) uninstallDict() 删除安装的词典
(4) 自定义词典
可以自己设定哪些关键词,也可以删除已经加入词库的一些关键词。
#手动添加或删除词汇,仅在内存中临时添加,未记录下来
segmentCN(“过氧化苯酰胺少量抹在皮肤”)
[1] “过” “氧化” “苯” “酰” “胺” “少量抹” “在” “皮肤”
insertWords(“过氧化苯酰胺”)
segmentCN(“过氧化苯酰胺少量抹在皮肤”)
[1] “过氧化苯酰胺” “少量抹” “在” “皮肤”
deleteWords(“过氧化苯酰胺”)
segmentCN(“过氧化苯酰胺少量抹在皮肤”)
[1] “过” “氧化” “苯” “酰” “胺” “少量抹” “在” “皮肤”
使用save参数把操作记录下来,下回启动直接使用
insertWords(“过氧化苯酰胺”, save = TRUE)
segmentCN(“过氧化苯酰胺少量抹在脸上”)
[1] “过氧化苯酰胺” “少量抹” “在” “脸上”
3、分词
关键函数segmentCN()
#segmentCN函数解释
segmentCN(strwords,
analyzer = get("Analyzer", envir = .RwordsegEnv),
nature = FALSE, nosymbol = TRUE,
returnType = c("vector", "tm"), isfast = FALSE,
outfile = "", blocklines = 1000)
#strwords:中文句子
#analyzer:分析的java对象
#nature:是否识别词组的词性(动词、形容词)
#nosymbol:是否保留句子符号
#returnType:默认是一个字符串,也可以保存成其他的样式,比如tm格式,以供tm包分析
#isfast:“否”代表划分成一个个字符,“是”代表保留句子,只是断句
#outfile:如果输入是一个文件,文件的路径是啥
#blocklines:一行的最大读入字符数
4、关于人名的分词
参数isNameRecognition 可用于人名的识别
> getOption("isNameRecognition")
[1] FALSE
> segmentCN("梅超风不是是桃花岛岛主")
[1] "梅" "超" "风" "不" "是" "是" "桃花" "岛" "岛" "主"
> segment.options(isNameRecognition = TRUE) #识别人名
> getOption("isNameRecognition")
[1] TRUE
> segmentCN("梅超风不是是桃花岛岛主")
[1] "梅超风" "不" "是" "是" "桃花" "岛" "岛" "主"
数字识别(isNumRecognition,默认为TRUE,默认识别数字);
量词识别(isQuantifierRecognition,默认为TRUE,默认识别量词)
res<-text4[1]
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(v)
names(d)<-c("词汇","词频")
#导出结果
write.csv(d, file="F:/大数据/R文本分析/result.csv", row.names=FALSE)
#画出标签云
mydata<-read.csv("F:/大数据/R文本分析/result.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")