作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。

邮箱:huang.tian-yuan@qq.com

R有很多自然语言处理的包,但是大多是针对英文的。中文来做NLP的包,经过长期探索,认为目前要做中文的NLP,首推jiebaR包。本文主要讲如何对中文进行分词,分词的概念就是把一个句子分成词语。如果在英文中,词语之间都有空格,因此分词非常简单。但是中文都连在一起,因此必须用一定的算法来分开。 举例:

  1. 英文:“R is my favorite programming language.”

  2. 中文:“R语言是我最喜爱的编程语言。”

现在,我们利用jiebaR包对这句话进行分词。

快速入门

首先,加载必要的包

1library(pacman)
2p_load(jiebaR)

然后,我们马上对句子进行分词。

1en = "R is my favorite programming language."
2cn = "R语言是我最喜爱的编程语言"
3
4worker() -> wk
5segment(en,wk)
6
7## [1] "R" "is" "my" "favorite" "programming"
8## [6] "language"

看出来了吧,英文分词根本没有难度,可以直接用空格分开所有组分。下面来看中文:

1segment(cn,wk)
2
3## [1] "R" "语言" "是" "我" "最" "喜爱" "的" 
4## [7] "编程语言"

美中不足的地方是,“R”和“语言”分了开来。

自定义词典

不过有的时候,如果没有自定义词典,有的词是无论如何分不对的。打个比方,如果“爸爸去哪儿”是一个词,但是分词的时候一般很难分出来。此外,我们的“R语言”也被分为了两部分。这样分词是不对的,为了让这种情况不再发生,我们必须自定义词典。首先,要看词典在哪里。

1show_dictpath()
2
3## [1] "F:/R-3.5.2/library/jiebaRD/dict"

来到这个路径下,然后对“user.dict.utf8”这个文件进行更改。使用记事本打开,然后在最后补上词条,也就是“R语言”。现在再来进行分词(不过我们要重新定义worker才能更新):

1worker() -> wk
2
3segment(cn,wk)
4
5## [1] "R语言" "是" "我" "最" "喜爱" "的" 
6## [7] "编程语言"

这次R语言已经变成了一个词组。 事实上,中文一直在变化,想要用一个算法就永远解决分词的问题,是不存在的(我从来没有更改过分词的模式,因为默认的情况已经足够解决大多数问题)。但是我们可以定期更新我们词库,从而让分词的效果能够维持在比较高的水平。

获取更多的字典

所以我们知道我们想要更多的词典,得到海量能够跟得上时代发展的词。有什么办法?我认为能够得到大量新词的地方,有两个:1.搜索引擎;2.输入法。搜狗输入法在搜狗词胞库中提供了大量的词典(https://pinyin.sogou.com/dict/),大家可以自由下载。不过下载的文件格式是以“.scel”为后缀的,双击一般就给我们的输入法补充了一个词库,但是没法让我们的jiebaR直接利用。幸好jiebaR的作者为我们提供了转格式工具,能够把scel文件直接转化为.utf8格式的文本文件,从而直接对这些词进行利用。具体内容可以参照https://github.com/qinwf/cidian,这里给出懒人加载的版本。

1p_load(devtools,stringi,pbapply,Rcpp,RcppProgress)
2install_github("qinwf/cidian")

那么,大家就可以愉快地使用一个简单的函数来进行转格式了:

1decode_scel(scel = "细胞词库路径", output = "输出文件路径", cpp = TRUE)

关于更多个性化的用法,大家可以去官网查询。

我认为至此,中文分词已经足够好用。我相信大神永远能够对算法进行革新,从而让分词更加准确。可惜我本人没学习过分词算法,没有办法在算法的层面来做一些事情。但是想办法得到自己想要得到的目标关键词词库,还是相对简单的,这样一来我们已经解决了大部分垂直领域的问题。

往期精彩:

  • R语言基于S3的面向对象编程

  • R语言信用评分卡:探索性数据分析

  • R语言中文社区2018年终文章整理(作者篇)

  • R语言中文社区2018年终文章整理(类型篇)

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战
回复 Python       1小时破冰入门
回复 数据挖掘     R语言入门及数据挖掘
回复 人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习     机器学习的商业应用
回复 数据科学     数据科学实战
回复 常用算法     常用数据挖掘算法

给我【好看】

你也越好看!

R语言自然语言处理:中文分词相关推荐

  1. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

    笔者寄语:与前面的RsowballC分词不同的地方在于这是一个中文的分词包,简单易懂,分词是一个非常重要的步骤,可以通过一些字典,进行特定分词.大致分析步骤如下: 数据导入--选择分词字典--分词 但 ...

  2. 自然语言处理-中文分词相关算法(MM、RMM、BMM、HMM)

    文章目录 一.前言 二.分词算法 2.1 规则分词 2.1.1 正向最大匹配法 2.1.2 逆向最大匹配法 2.1.3 双向最大匹配法 2.2 统计分词 2.2.1 语言模型 2.2.2 HMM模型 ...

  3. Code Clinic: R 代码诊所:R语言 Lynda课程中文字幕

    Code Clinic: R 中文字幕 代码诊所:R语言 中文字幕Code Clinic: R 成功的程序员不仅仅知道如何编码 他们也知道如何思考解决问题 Code Clinic是一系列课程,我们的教 ...

  4. R语言读取 文件 中文乱码,R语言画图 中文不显示

    R语言 读入excel文件:用openxlsx install.packages(openxlsx) library(openxlsx) a<-read.xlsx("exercise1 ...

  5. 如何在R语言中进行中文编程

    又发现了个好玩的hiahiahia: 给四个例子,大家看了例子应该都能会用中文写r语言: 例1 预定义: # 定义函数 "生成正态分布随机数"<-function(数量=1, ...

  6. R语言做文本挖掘 Part2分词处理

    Part2分词处理 [发现有人转载,决定把格式什么重新整理一遍,有时间做个进阶版文本挖掘,恩!原文地址:CSDN-R语言做文本挖掘 Part2分词处理] 在RStudio中安装完相关软件包之后,才能做 ...

  7. R语言:读取中文数据乱码的解决方案

    R语言不是中国人开发的,自然对中文的处理上没有特别考虑,但是我们依然可以处理. 下面我给出了解决方案.但我想,别的读取解决方案应该也是一样的.不信,可以看我的下一篇文章对各种类型的中文数据的读取. 一 ...

  8. python语言常用的中文分词第三方库是_基于boost使用Python调用NLPIR(ICTCLAS2013)中文分词组件...

    最近需要用到中文分词,本来想省事,用python的第三方库结巴分词,但看了下API,计算文本关键词的方法没有没有返回关键字对应的权值,翻了下文档应该是不还不支持,只好继续使用中科院的那套ICTCLAS ...

  9. R语言实战(中文完整版)pdf

    下载地址:网盘下载 内容简介  · · · · · · 数据时代已经到来,但数据分析.数据挖掘人才却十分短缺.由于"大数据"对每个领域的决定性影响, 相对于经验和直觉,在商业.经济 ...

  10. c语言西文空格,中文分词入门之最大匹配法

    中文分词在中文信息处理中是最最基础的,无论机器翻译亦或信息检索还是其他相关应用,如果涉及中文,都离不开中文分词,因此中文分词具有极高的地位.中文分词入门最简单应该是最大匹配法了,当年师兄布置给我的第一 ...

最新文章

  1. 【杂谈】如何应对烦人的开源库版本依赖-做一个心平气和的程序员?
  2. Qt CMake命令参考
  3. 一种类的渐进式开发写法
  4. 阿里云ECI如何6秒扩容3000容器实例?
  5. 538.把二叉搜索树转换为累加树(结合自己的理解解释一下别人题解的递归部分)
  6. java 调用c++ jni_Java中使用JNI调用C++
  7. 关于cmp函数参数中的符号(转)
  8. 快速排序(java版)
  9. fortran调用MKL函数库中的gemm的fortran95接口计算矩阵相乘
  10. 100套Java毕业设计和课程设计项目案例(包含项目源码)
  11. 中级通信工程师证书会过期吗
  12. 大咖分享|王建峰:数据指标管理体系建设实践分享
  13. 计算机音乐对应的数字,音乐和数字之间的关系
  14. 结构体初始化、结构体指针、结构体数组
  15. python网络爬虫之淘宝订单提取
  16. sentinel只有实时监控不显示
  17. 分析PostLateUpdate.FinishFrameRendering()。每帧渲染时间截然不同
  18. 强化学习(一) - 基础认知
  19. 前端常见提交数据方式对比
  20. 使用Excel进行时间转换(附时间小知识)

热门文章

  1. 太牛逼了!这个开源项目,可以把我从视频中移除!
  2. 日志框架选型,Logback 还是 Log4j2?
  3. 真赞!阿里开源的这款分布式事务框架,不愧为民族之光
  4. 基本操作?这46个 Linux 面试常见问题送给你
  5. Python 密集知识点汇总
  6. 别轻易接受父母的建议
  7. 科学计算机统计模式中中间数据输错怎么办,科学计算器在统计功能中如何清除以前不需要的数据?...
  8. pythonforeverybody中文版_PyTorch实现EverybodyDanceNow
  9. 小程序之旅——第四站(模板框架)
  10. mybatis入门截图四(订单商品数据模型-懒加载-缓存)