美文网首页
R语言自然语言处理:中文分词

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

作者: 天善智能 | 来源:发表于2019-02-28 11:07 被阅读13次

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

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

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

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

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

  • 中文:“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语言自然语言处理:中文分词

      欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞...

    • 基于Trie 树实现简单的中文分词

      中文分词简介 中文分词是中文自然语言处理的基础,中文分词的正确率如何直接影响后续的词性标注(也有些词性标注算法不需...

    • 中文分词方法

      中文分词是中文自然语言处理的基础,现代语言分析处理算法基本是以词为单位进行计算的。 1、词典匹配 词典匹配是分词最...

    • 1. jieba中文处理

      jieba中文处理 1. 中文分词 jieba是一个在中文自然语言处理中用的最多的工具包之一,它以分词起家,目前已...

    • NLP自然语言处理-第三章中文分词技术

      第三章中文分词技术 [toc] 本章将讲解中文自然语言处理的第一项核心技术:中文分词技术。在语言理解中,词是最小的...

    • <<数学之美>> part1

      摘要 : [自然语言处理] [基于规则] [基于统计] [统计语言模型] [马尔科夫] [分词] 自然语言处理--...

    • python 结巴分词学习

      结巴分词(自然语言处理之中文分词器) jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可...

    • 中文分词算法初探之最大匹配

      中文分词是中文自然语言处理中十分重要的基础性工作,基本后续的一切工作都依赖分词。本文主要探讨MMSEG这个分词系统...

    • Day 2 中文分词算法

      与拉丁语系语言不同,汉藏语系的自然语言中词汇是没有自然分割开的,因此中文分词是中文自然语言处理的第一步(不过可以考...

    网友评论

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

        本文链接:https://www.haomeiwen.com/subject/wychuqtx.html