spark ansj中文分词

基于java的中文分词工具ansj,提供了多种模式,而ansj的一个优势是可以能够添加用户自定义辞典

 

import org.ansj.splitWord.analysis._

import org.ansj.recognition.impl.StopRecognition

import org.ansj.library.DicLibrary

第一个是导入ansj分词库;第二个导入停用词库,可以添加自定义的停用词;第三个是添加自定义词典的库

 

一、简单分词

首先,读取文件

val lines = sc.textFile("file:///home/sun/fenci.txt")

val str = lines.collect()(0)

spark ansj中文分词_第1张图片

使用NlpAnalysis进行分词

System.out.println(NlpAnalysis.parse(str))

spark ansj中文分词_第2张图片

将分词结果以空格为间隔的字符串

System.out.println(NlpAnalysis.parse(str).toStringWithOutNature(" "))

 

二、添加自定义词典

仔细观察上面的分词结果,会发现c++被分割成了c、+、+三个符号,这是就需要添加自定义词典了

DicLibrary.put(DicLibrary.DEFAULT,"/home/sun/cidian.txt")

其中cidian.txt是自己需要添加的词典,内容如下:

c++ (tab键) n (tab键) 1000

再次进行分词后,结果如下

 

发现c++已经被分为一个词了

 

三、添加自定义停用词

上面的分词结果还包括了标点符号、介词等出现较多但是对我们没用的词,这时我们就需要去掉这些。ansj提供了多种添加停用词的方式

首先是创建一个对象

val s = new StopRecognition()

 

1、根据词性添加

根据上面的结果可以看出标点符号的词性是w

s.insertStopNatures("w")

 

2、添加单个词

s.insertStopWords("我")

 

3、通过正则表达式添加

s.insertStopRegexes("^[a-zA-Z]{1,}")

 

得到的结果如下

spark ansj中文分词_第3张图片

发现结果中已经不存在标点符号还有字母了。

 

 

四、结果处理

我们已经得到的是一个字符串类型的结果,可以进行各种操作

例如生成一个数组val arr = resultString.split(" ")

 

 

你可能感兴趣的:(spark)