中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题。

思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下:

后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,,也是个知识发现的过程,以后有机会再学习下。

==================================================

* 中文分词常用实现:

单机:R语言+Rwordseg分词包 (建议数据量<1G)分布式:Hadoop+Smallseg库词库:Sougou词库,Sougou输入法官网可下载这里只先介绍单机的实现:1、R语言:专门用于统计分析、绘图的语言2、Rwordseg分词包:引用了@ansj开发的ansj中文分词工具,基于中科院的ictclas中文分词算法,无论是准确度还是运行效率都超过了rmmseg4j。

* 环境准备 (Windows或Linux版本都行):

R下载:Rwordseg包下载:https://r-forge.r-project.org/R/?group_id=1054rJava包下载:Rwordseg和rJava这些包解压后放到\R\R-3.1.0\library即可

* R语言实现代码

#加载rJava、Rwordseg库library(rJava);library(Rwordseg);#==读入数据lecture=read.csv("E:\\worldcup_test.txt",sep=",",header=TRUE,fileEncoding="UTF-8");#查看前几行,看是否有字符编码问题head(lecture);#获取数据集长度n=length(lecture[,1]);print(n)#==文本预处理res=lecture[lecture!=""];#剔除URLres=gsub(pattern="http:[a-zA-Z\\/\\.0-9]+","",res);#剔除特殊词res=gsub(pattern="[我|你|的|了|是]","",res);#==分词+频数统计words=unlist(lapply(X=res,FUN=segmentCN));word=lapply(X=words,FUN=strsplit,"");v=table(unlist(word));#降序排序v=rev(sort(v));d=data.frame(word=names(v),freq=v);#过滤掉1个字和词频小于100的记录d=subset(d,nchar(as.character(d$word))>1&d$freq>=100)#==输出结果write.csv(d,file="E:\\worldcup_keyword.txt",row.names=FALSE)

将文本信息存放在E:\\worldcup_test.txt中,运行后E:\\worldcup_keyword.txt就是保存了统计完的结果了,截图如下:word列是词、freq列是词频

* 常见问题:一些词没被识别=> 手动添加词库

只使用默认词库的分词效果不是很好,最主要问题就是一些球星名字没有被识别出来,如下图:

这种情况需要手动添加一些词库进来,一般使用Sougou词库,在Sougou输入法的工具箱里,有细胞词库一栏,点击后即可在其官网下载需要的词库。

除了使用网上的词库,也可以自己手动添加一些词进去,每个词一行写到.txt文件上,调用installDict()添加即可

#==添加新词库(跑一遍即可)installDict("D:\\ProgramFiles\\R\\R-3.1.0\\libword\\myword.txt",dictname="myword")installDict("D:\\ProgramFiles\\R\\R-3.1.0\\libword\\foodball.scel",dictname="foodball")#显示当前手动添加的词库listDict()

手工添加完词库后,分词效果明显就上来了:

* 常见问题:文本存在乱码和特殊字符=> 脚本过滤

由于帖子属于UGC内容,一些乱码和特殊字符会影响R语言处理文本。比如read.cvs()读入文件读到乱码就返回了,没能读入全部文本。

这里没有深入去看R语言的字符处理方式,而是选择绕开这个问题,统一将utf8文本转成unicode,写了段Python根据中文的编码范围来过滤掉乱码(替换为" "):

* 常见问题:文本数据量过大=> 切分文件分批次计算、或使用Hadoop+Smallseg库

==================================================

* 中文分词基础

同生天地间,为何我不能。

中文分词实践(基于R语言)

相关文章:

你感兴趣的文章:

标签云: