R语言学习系列12文本分词.docx
《R语言学习系列12文本分词.docx》由会员分享,可在线阅读,更多相关《R语言学习系列12文本分词.docx(12页珍藏版)》请在冰豆网上搜索。
R语言学习系列12文本分词
12.文本分词
文本分词,就是对文本进行合理的分割,从而可以比较快捷地获取关键信息。
例如,电商平台要想了解更多消费者的心声,就需要对消费者的文本评论数据进行内在信息的数据挖掘分析,而文本分词是文本挖掘的重要步骤。
R语言中,对中文分词支持较好的包有RWordseg包和jiebaR包。
一、配置Java环境
步骤1.下载JDK安装包
点JavaDownload图标进入下载界面(JavaSEDevelopmentKit);点AcceptLicenseAgreement,接受许可协议,选择对应系统的版本下载,比如Windowsx64
步骤2.安装JDK
安装路径(可修改),比如D:
\ProgramFiles\Java\jdk1.8.0_101
特别注意:
第2次出现选择路径时,是选择jre的安装路径,一定不要和前面jdk同一个路径,建议也在放在Java目录下,单放在jre文件夹,比如D:
\ProgramFiles\Java\jre1.8.0_101否则将有问题。
步骤3.配置环境变量
右键计算机->属性->高级系统设置->环境变量,在“环境变量”窗口“系统变量”区域操作:
(1)【新建…】,变量名输入:
JAVA_HOME
变量值输入JDK安装路径:
D:
\ProgramFiles\Java\jdk1.8.0_101
【确定】
(2)双击Path,在变量值框末尾加上
;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
【确定】
(3)【新建…】,变量名输入:
CLASSPATH变量值输入:
%JAVA_HOME%lib\dt.jar;%JAVA_HOME%\lib\tools.jar
【确定】
步骤4.测试是否配置成功
运行->cmd,回车,输入java–version回车,显示版本号等信息;
输入javac–version回车,也显示版本号,如下图所示,则表示配置成功
二、RWordseg包
1.先安装rJava包(正常命令安装即可)
2.安装Rwordseg包
命令安装:
install.packages("Rwordseg",repos="http:
//R-Forge.R-project.org")
注意:
该网址很可能不能正常打开。
建议采用本地安装:
下载Rwordseg.zip包,R操作界面,程序包->InstallPackage(s)fromlocalfiles…,找到Rwordseg.zip文件,确定安装即可,测试下图则表示安装成功:
3.Rwordseg包常用函数
insertWords(x,save=TRUE)
向词库导入新词汇x,save=TRUE保存新词汇,下次启动仍可用;
deleteWords(x)——从词库中删除词汇x
getOption("isNameRecognition")
查看人名识别功能的状态,结果为TRUE表明能够识别;
segment.options("isNameRecognition"=TRUE)
设置人名识别功能的状态;
installDict(dictpath=词典路径,dictname="自定义词典名称",dicttype=c("text","scel"),load=TRUE)
添加用户自定义的词典;dicttype指定安装词典的类型,text为普通文本格式,scel为搜狗细胞词库;load设置安装后是否自动加载到内存,默认为TRUE;
listDict()——查看已安装词典;
uninstallDict(removedict=listDict()$Name,remove=TRUE)
卸载用户自定义的词典,removedict指定要卸载的词典名称;remove指定是否立即清除词典中的词语;
segmentCN(x,nature=TRUE,nosymbol=TRUE)
实现中文分词,nature设置是否输出词性,默认不输出;nosymbol默认为TURE,表示不输出标点,只有汉字、英文、数字。
注意:
目前的词性识别和标点识别容易出错,只作为参考。
4.实例
>library(rJava)
>library(Rwordseg)
>segmentCN("雷克萨斯品牌")#导入词汇前的分词
[1]"雷""克""萨""斯""品牌"
>insertWords(c("雷克萨斯"))#导入词汇
>segmentCN("雷克萨斯品牌")#导入词汇后的分词
[1]"雷克萨斯""品牌"
>deleteWords(c("雷克萨斯"))#删除词汇
>installDict(dictpath="E:
/办公资料/R语言/文本分词包/汽车词汇大全.scel",dictname="qiche")#安装自定义的词典
2388wordswereloaded!
...Newdictionary'qiche'wasinstalled!
>listDict()#显示已安装词典
NameTypeDes
1qiche汽车官方推荐,词库来源于网友上传!
Path
1d:
/ProgramFiles/R/R-3.3.1/library/Rwordseg/dict/qiche.dic
>segmentCN("雷克萨斯品牌",nature=TRUE)
qichen
"雷克萨斯""品牌"
>uninstallDict(removedict="qiche")#卸载词典
2388wordswereremoved!
...Thedictionary'qiche'wasuninstalled!
三、jiebaR包
jiebaR包支持最大概率法、隐马尔可夫模型、索引模型、混合模型4种分词模式,还有词性标注、关键词提取、文本Simhash相似度比较等功能。
1.先用函数worker()初始化分词引擎:
worker(type="mix",dict=DICTPATH,hmm=HMMPATH,user=USERPATH,idf=IDFPATH,stop_word=STOPPATH,write=T,qmax=20,topn=5,encoding="UTF-8",detect=T,symbol=F,lines=1e+05,output=NULL,bylines=F,user_weight="max")
其中,type指定分词引擎类型:
mix(混合模型)、mp(支持最大概率法)、hmm(隐马尔可夫模型)、query(索引模型)、tag(词性标注)、simhash(文本simhash相似度比较)、keywords(关键词提取);
dict指定词库路径,默认为DICTPATH,可用于除hmm之外的分词引擎;
hmm为隐马尔可夫模型的路径,默认为HMMPATH,可用于除mp之外的分词引擎;
user为用户自定义词库;
idf为逆文本频率指数路径,默认为IDFPATH,可用于simhash和keywords分词引擎;
stop_word为停止词词库路径,默认为STOPPATH,可用于simhash、keywords、tagger、segment分词引擎;
qmax为词的最大查询长度,默认为20,可用于query分词引擎;
topn为关键词个数,默认为5,可用于simhash和keywords分词引擎;
symbol指定输出结果是否保留符号,默认为FALSE。
2.使用分词运算符<=或函数segment(),进行分词
segment(code,jiebar,mod=NULL)
qseg<=code
qseq[code]
其中,code为中文句子或文本文档路径;jiebar为某一个jiebarR分词引擎;mod可改变默认的分词引擎,其值可为mix、hmm、query、full、level、mp;
qseq默认的分词模式为mix,可通过qseg$type修改分词模式。
>library(jiebaR)
>mixseg=worker()#默认mix分词引擎
>mpseg=worker(type="mp")
>hmmseg=worker(type="hmm")
>word="人们都说桂林山水甲天下"
>mixseg<=word
[1]"人们""都""说""桂林山水"
[5]"甲天下"
>hmmseg<=word
[1]"人们""都""说""桂林山""水甲天"
[6]"下"
>segment(word,mixseg)#与前面运算符结果相同
[1]"人们""都""说""桂林山水"
[5]"甲天下"
>qseg<=word#用qseg进行分词
[1]"人们""都""说""桂林山水"
[5]"甲天下"
>qseg[word]
[1]"人们""都""说""桂林山水"
[5]"甲天下"
>setwd("E:
/办公资料/R语言/R语言学习系列/codes")
>segment("ex12_data.txt",mixseg)#对文件进行分词
[1]"./ex12_data.segment.2016-08-08_21_59_24.txt"
>mixseg<="ex12_data.txt"
[1]"ex12_data.segment.2016-08-08_22_07_21.txt"
注:
初始化分词引擎后,例如可用mixseg命令,输出其设置信息,可用$修改其参数,例如mixseg$encoding="unicode";有些参数初始化时设定无法修改,可通过mixseg$PrivateVarible查看。
3.词性标注
使用tag来进行分词和词性标注,词性标注使用混合模型分词,标注采用和ictclas兼容的标记法。
>word="人们都说桂林山水甲天下"
>tagger=worker("tag")#初始化分词引擎type=“tag”
>tagger<=word
ndvns
"人们""都""说""桂林山水"
l
"甲天下"
>qseg$type="tag"#将分词模式改为tag
>qseg[word]
ndvns
"人们""都""说""桂林山水"
l
"甲天下"
注:
汉语文本词性标注对照表见附录。
4.关键词提取和simhash计算
需要将worker中的type参数设置成“keywords”或“simhash”,并使用topn指定关键词的个数。
>keys=worker("keywords",topn=1)
>keys<=word
10.6048
"桂林山水"
>simhash=worker("simhash",topn=2)
>simhash<=word
$simhash
[1]"17867597785105042892"
$keyword
10.604810.2631
"桂林山水""甲天下"
主要参考文献:
[1]张良均,谢佳标,杨坦,肖刚.R语言与数据挖掘.机械工业出版社,2016.
附录:
汉语文本词性标注标记对照表: