中文分词实践(基于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语言实现代码

  1. # 加载rJava、Rwordseg库
  2. library(rJava);
  3. library(Rwordseg);
  4. # == 读入数据
  5. lecture=read.csv("E:\\worldcup_test.txt",sep=",",header=TRUE,fileEncoding="UTF-8");
  6. # 查看前几行,看是否有字符编码问题
  7. head(lecture);
  8. # 获取数据集长度
  9. n=length(lecture[,1]);
  10. print(n)
  11. # == 文本预处理
  12. res=lecture[lecture!=" "];
  13. #剔除URL
  14. res=gsub(pattern="http:[a-zA-Z\\/\\.0-9]+","",res);
  15. #剔除特殊词
  16. res=gsub(pattern="[我|你|的|了|是]","",res);
  17. # == 分词+频数统计
  18. words=unlist(lapply(X=res, FUN=segmentCN));
  19. word=lapply(X=words, FUN=strsplit, " ");
  20. v=table(unlist(word));
  21. # 降序排序
  22. v=rev(sort(v));
  23. d=data.frame(word=names(v), freq=v);
  24. # 过滤掉1个字和词频小于100的记录
  25. d=subset(d, nchar(as.character(d$word))>1 & d$freq>=100)
  26. # == 输出结果
  27. 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、基于规则(即字符串匹配,词库组织成字典树)

- 正向最大匹配:从左到右,"不知道|你|在|说什么"

- 反向最大匹配:从右到左,"不|知道|你在|说|什么"

- 最短路径:切出来的词最少,"不知道|你在|说什么"(效果较好)

b、基于词义(还不成熟)

c、基于统计(概率论)

2、语料库(词库):来源于大量真实文本的加工和训练

* 中科院ictclas中文分词系统

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

中文分词实践(基于R语言),布布扣,bubuko.com

时间: 2024-12-25 12:14:36

中文分词实践(基于R语言)的相关文章

逻辑回归算法实现_基于R语言

逻辑回归(Logistic Regression)模型和线性回归非常相似,可以说就是在逻辑回归的基础上加上了一步逻辑转换,也就是因为这个转换,使逻辑回归模型非常适用于二分类问题的概率预测.本文主要详述逻辑回归模型的基础以及逻辑回归模型的R语言实现. 一.逻辑回归模型原理 首先要讲一下线性回归在预测分类事件中的缺点:线性回归模型的泛化能力很差,如果训练集存在噪点,会导致模型的结果特别差,不同样本建立起来的模型分割点不同:下图中根据年龄预测是否成年的分类问题,斜线就是根据训练集拟合出来的线性回归模型

分享《深度学习精要(基于R语言)》+PDF+源码+Joshua F.Wiley+高蓉

下载:https://pan.baidu.com/s/14UlxD5VJRY92UpP7Wr6Taw 更多最新的资料:http://blog.51cto.com/14087171 <深度学习精要(基于R语言)>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,带目录和书签,能够复制粘贴:高清英文版PDF,带目录和书签,能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图 原文地址:http://blog.51cto.com/14087171

机器学习-线性回归(基于R语言)

基本概念 利用线性的方法,模拟因变量与一个或多个自变量之间的关系.自变量是模型输入值,因变量是模型基于自变量的输出值. 因变量是自变量线性叠加和的结果. 线性回归模型背后的逻辑——最小二乘法计算线性系数 最小二乘法怎么理解? 它的主要思想就是求解未知参数,使得理论值与观测值之差(即误差,或者说残差)的平方和达到最小.在这里模型就是理论值,点为观测值.使得拟合对象无限接近目标对象. 一元线性回归与多元线性回归 自变量只有一个的时候叫一元线性回归,自变量有多个时候叫多元线性回归. R语言实现 bik

基于R语言的数据分析和挖掘方法总结——均值检验

2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, 1876-1937)所提出,student则是他的笔名.t检验是一种检验总体均值的统计方法,当数据中仅含单组样本且样本数较大时(通常样本个数≧30的样本可视为样本数较大),可用这种方法来检验总体均值是否大于.小于或等于某一特定数值.当数据中仅含单组样本但样本数较小时(通常样本个数<30的样本可视为

基于R语言的数据分析和挖掘方法总结——描述性统计

1.1 方法简介 描述性统计包含多种基本描述统计量,让用户对于数据结构可以有一个初步的认识.在此所提供之统计量包含: 基本信息:样本数.总和 集中趋势:均值.中位数.众数 离散趋势:方差(标准差).变异系数.全距(最小值.最大值).内四分位距(25%分位数.75%分位数) 分布描述:峰度系数.偏度系数 用户可选择多个变量同时进行计算,亦可选择分组变量进行多组别的统计量计算. 1.2 详细介绍 1.2.1 样本数和总和 1. R语言涉及的方法:length(x) 1.2.2 均值(Mean) 1.

基于R语言的梯度推进算法介绍

通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法.通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Boosting算法,这是因为和其他方法相比,它在产生类似的结果时往往更加节约时间. Boosting算法有很多种,比如梯度推进(Gradient Boosting).XGBoost.AdaBoost.Gentle Boost等等.每一种算法都有自己不同的理论基础,通过对它们进行运用,算法之间细微的差别

机器学习-K-means聚类及算法实现(基于R语言)

K-means聚类 将n个观测点,按一定标准(数据点的相似度),划归到k个聚类(用户划分.产品类别划分等)中. 重要概念:质心 K-means聚类要求的变量是数值变量,方便计算距离. 算法实现 R语言实现 k-means算法是将数值转换为距离,然后测量距离远近进行聚类的.不归一化的会使得距离非常远. 补充:scale归一化处理的意义 两个变量之间数值差别太大,比如年龄与收入的数值差别就很大. 步骤 第一步,确定聚类数量,即k的值 方法:肘部法则+实际业务需求 第二步,运行K-means模型 第三

基于R语言的用户分析

1. 基本分析理论 C5.0是决策树模型中的算法,79年由J R Quinlan发展,并提出了ID3算法,主要针对离散型属性数据,其后又不断的改进,形成C4.5,它在ID3基础上增加了队连续属性的离散化.C5.0是C4.5应用于大数据集上的分类算法,主要在执行效率和内存使用方面进行了改进.C4.5算法是ID3算法的修订版,采用GainRatio来加以改进方法,选取有最大GainRatio的分割变量作为准则,避免ID3算法过度配适的问题.C5.0算法则是C4.5算法的修订版,适用于处理大数据集,采

最详细的基于R语言的Logistic Regression(Logistic回归)源码,包括拟合优度,Recall,Precision的计算

这篇日志也确实是有感而发,我对R不熟悉,但实验需要,所以简单学了一下.发现无论是网上无数的教程,还是书本上的示例,在讲Logistic Regression的时候就是给一个简单的函数及输出结果说明.从来都没有讲清楚几件事情: 1. 怎样用训练数据训练模型,然后在测试数据上进行验证(测试数据和训练数据可能有重合)? 2. 怎样计算预测的效果,也就是计算Recall,Precision,F-measure等值? 3. 怎样计算Nagelkerke拟合优度等评价指标? 发现这些书本和一些写博客的朋友,