7.3.1 基于jiebaR包的中文分词

7.3.1 基于jiebaR包的中文分词

1.jiebaR包的安装与初始使用

首先安装并加载jiebaR包,可以使用install.packages()函数安装jiebaR包,然后使用library()函数对其进行加载,示例如下:

我们也可以通过pacman包的p_load()函数来加载jiebaR包。如果已经安装了jiebaR包,p_load()函数只会进行加载;如果没有安装jiebaR包,p_load()函数会先安装jiebaR包再进行加载。示例如下:

接下来,尝试使用jiebaR包进行分词,jiebaR包提供了如下三种方式。

第一种方式示例如下:

第二,通过[]的方式来进行分词,示例如下:

第三,通过=的方式来进行分词,示例如下:

因为在加载jiebaR包时并不会启动分词引擎,所以在分词之前,需要调用worker()函数来启动。jiebaR包提供了7种分词引擎,默认使用混合模型,通过type参数可以进行更改,但是一般情况下不需要。

2.自定义词典

通过以上输出结果可以发现,“R语言”被分成了“R”和“语言”两个词,改变了它本来的含义,这显然不是想要的结果。语言随着社会的发展在不断发生变化,新的词汇越来越多,像一些网络热词,如“干饭人”“真香”等,无法被算法理解,因此在分词过程中无法直接通过算法将这些词语分离出来。在这种情况下,需要通过自定义词典的方式来告诉算法哪些词可以作为整体词汇予以保留,从而使分词达到更好的效果。jiebaR包提供了这个功能,且添加自定义词典有如下两种方式:一种是使用new_user_word()函数添加;另一种是使用worker()函数的user参数添加。

(1)使用new_user_word()函数添加

在new_user_word()的参数中直接添加自定义词典,示例如下:

(2)通过worker()函数的user参数添加

jiebaR包自带用户词典,我们可以使用show_dictpath()函数查看自定义词典的位置,具体如下:

上述路径下的“user.dict.utf8”文件就是自定义词典,我们可以打开记事本对其进行修改,这里只需要补上词条“R语言”即可。在实际操作过程中,可以用如图7-8所示的方式定义词典。

图7-8 自定义词典

在编辑自定义词典时,可以用换行符将专有名词隔开,以便后续编辑。值得注意的是,词典第一行需要留空,以避免分词包加载自定义词典失效,这可能是一个未解决的漏洞。具体如下:

编辑完自定义词典后,直接运行segment()函数,可以发现R语言依然被分词成了“R”和“语言”两个词,这是因为自定义词典未加载成功,需要重新定义分词引擎。将自定义词典保存在工作目录下,保存方式为“.utf8”文件,编码为“utf-8”,然后将worker()函数的user参数设置为自定义词典的文件名,示例如下:

通过输出结果可以发现,此时R语言被分成了一个词汇。

随着时代发展,语言也在不断发生改变,通用词库需要不断随之更新,以确保得到良好的分词效果。利用网上的资源可以定期更新通用词库,搜狗输入法在https://pinyin.sogou.com/dict/上提供了各种专业类别的词库,读者可以自由下载使用。或者,读者也可以使用搜狗细胞词库在线提取转换工具https://cidian.shinyapps.io/shiny-cidian/将下载的scel格式的文件转换成txt格式的文本文件并加入词库中。

3.自定义/加载停用词表

除了自定义词典之外,jiebaR包还提供了自定义停用词表的功能。在阅读中文文本时可以发现,中文文本中有许多感叹词、语气词、助词等,如“的”“了”“么”“呢”等,这些语气词虽然常见但并没有实际的含义。在文本分析中,这类词不仅会影响分析的效率,还会影响文本分析的结果,因此需要将这些词汇作为停用词删掉。

停用词词库构建方式类同于自定义词库,但功能有别:停用词词库用于剔除无实质语义的词语;自定义词库用于增加领域专业术语。事实上,jiebaR包中自带停用词库,可以将其复制到工作目录下直接使用。jiebaR包不会直接加载停用词表,需要通过worker()函数的stop_word参数添加,示例如下:

4.热词的词频统计

jiebaR包中的freq()函数可以用于词频统计,返回值为由分词和词频构成的数据框,示例如下:

freq()函数的返回值可以直接作为wordcloud2()函数的数据,这也为绘制词云图提供了便利。

5.词语的词性标注

词语的词性对理解文本含义有很重要的意义,jiebaR包提供了tagging()函数,我们可以首先在worker()函数中设置type参数,之后在tagging()函数中引入worker对象,在分词的同时实现词性标注,示例如下: