R语言文本分析问题

wbingyang 2018-07-17

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")

R语言文本分析问题

相关推荐