R语言自然语言处理:中文分词

栏目: R语言 · 发布时间: 5年前

R语言自然语言处理:中文分词

作者: 黄天元 ,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深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语言自然语言处理:中文分词

往期精彩:

R语言自然语言处理:中文分词

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

回复  爬虫             爬虫三大案例实战

回复  Python        1小时破冰入门

回复  数据挖掘      R语言入门及数据挖掘

回复  人工智能      三个月入门人工智能

回复  数据分析师   数据分析师成长之路 

回复  机器学习      机器学习的商业应用

回复  数据科学      数据科学实战

回复  常用算法     

常用数据挖掘算法

本文由R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

领域特定语言

领域特定语言

Martin Fowler / ThoughtWorks中国 / 机械工业出版社华章公司 / 2013-3 / 89.00元

本书是DSL领域的丰碑之作,由世界级软件开发大师和软件开发“教父”Martin Fowler历时多年写作而成,ThoughtWorks中国翻译。全面详尽地讲解了各种DSL及其构造方式,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及增进与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。 全书共57章,分为六个部分:第一部分介......一起来看看 《领域特定语言》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具