前面安装了Rwordseg包,这个包的工作方式:
“Rwordseg”在分词之前会去掉文本中所有的(中文)符号,这样就会造成原分开的句子前后相连,本来分开的两个字也许连在了一起。
另外一个中文分词包“jieba”分词包不会去掉任何符号,而且返回的结果里也会有符号。所有小文本准确性上可能”Rwordseg”会有误差。
Rwordseg分词原理:
Rwordseg是一个R环境下的中文分词工具,使用rjava调用java分词工具Ansj。
该分词算法有以下几个步骤:
1.全切分,原子切分;
2.N最短路径的粗切分,根据隐马尔科夫模型和viterbi算法,达到最优路径的规划;
3.人名识别;
4.系统词典补充;
5.用户自定义词典的补充;
6.词性标注。
影响分词效果的主要因素:分词词典的使用。
1.搜狗分词包
从搜狗词库下载分词词典
[搜狗下载官网](http://pinyin.sogou.com/dict/cate/index/101)
不能直接将下载d的~.scel改为~.txt格式
# 加载词典
installDict("E:/wyeth/互联网.scel","internet",dicttype = "scel")
installDict函数介绍
installDict(dictpath, dictname, dicttype = c(“text”,”scel”), load = TRUE)
2.自定义词典
可以自己设定哪些关键词,也可以删除已经加入词库的一些关键词。
#手动添加或删除词汇,仅在内存中临时添加,未记录下来
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,默认识别量词)