R分词继续,\"不|知道|你在|说|什么\"分词添加新词

* 中文分词常用实现:

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

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

R下载:http://mirrors.ustc.edu.cn/CRAN/ Rwordseg包下载:https://r-forge.r-project.org/R/?group_id=1054 rJava包下载:http://cran.r-project.org/web/packages/rJava/index.html 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!=" "]; 
#剔除URL 
res=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()添加即可

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

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

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

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

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

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

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

* 中文分词基础

1、分词算法: a、基于规则(即字符串匹配,词库组织成字典树) - 正向最大匹配:从左到右,"不知道|你|在|说什么" - 反向最大匹配:从右到左词系统

中科院的ictclas应该是国内做得最好的中文分词系统了,例子使用的Rwordseg分词包就是基于ictclas算法实现,具体算法思路可在其官网贴出的相关论文学习到:(http://www.ictclas.org/)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏文渊之博

PowerBI 引入时间智能

简介 Power BI Desktop -是一款由微软发布的自助式商业智能工具,功能强大、易于使用。其中还可以通过微软云连多个数据源并且使用数据源来创建可视化表...

3339
来自专栏郭霖

Android数据库高手秘籍(四)——使用LitePal建立表关联

目前我们已经对LitePal的用法有了一定了解,学会了使用LitePal来创建表和升级表的方式,那么今天就让我们一起继续进阶,探究一下如何使用LitePal来建...

2949
来自专栏数据和云

数据库时间出现&#39;0000/00/00&#39;,难道我穿越了?

前几天有个朋友遇到一个问题,在做日期类型数据的运算的时候出现了‘0000-00-00’的结果,不得其解。你是否遇到过同样的问题呢?这样一个并不存在的时间点,难道...

3086
来自专栏nimomeng的自我进阶

Swift 4.2新特性——WWDC2018 Session401笔记

厨子今年的演讲很不给力。不过既然是软件开发者大会嘛,焦点自然应该放在软件功能上。 所以我看了下今年的Session401,也就是Swift4.2新特性介绍,做...

3152
来自专栏大数据和云计算技术

索引技术简介

2.索引技术 索引是关系型数据库里的重要概念。总的来说,索引就是拿空间换时间。数据库技术和大数据技术会有一个融合的过程,除了前面讲到的B数索引、Hash索引等,...

5218
来自专栏salesforce零基础学习

salesforce 零基础学习(四十一)Group

 salesforce中,有的时候我们需要将一组用户放进一个Group,用来实现以下主要功能: 1.通过sharing rule设置默认的共享访问; 2.将记录...

2018
来自专栏有趣的Python和你

Python数据分析之dataframe的groupbygroupby函数highcharts绘图

1083
来自专栏CDA数据分析师

入门必学!在Python中利用Pandas库处理大数据

在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章《别老扯什么Hadoop了,你的数据根本不够大》指出:只有在超过5TB数据量的规模下,Had...

2079
来自专栏Java架构

分布式超大规模数据的实时快速排序算法

3188
来自专栏牛客网

Java面经:去哪儿四轮面试真题分享

废话不多说,前几天参加去哪网面试,面经如下: 去哪网java实习生面总共分为四轮(我也不知道为什么这么多)。 一面(技术面) 1.自我介绍,并分析简历上的项目,...

3416

扫码关注云+社区