基于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)
使用NlpAnalysis进行分词
System.out.println(NlpAnalysis.parse(str))
将分词结果以空格为间隔的字符串
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,}")
得到的结果如下
发现结果中已经不存在标点符号还有字母了。
四、结果处理
我们已经得到的是一个字符串类型的结果,可以进行各种操作
例如生成一个数组val arr = resultString.split(" ")