我这篇博客的作用是为了解决用户使用paoding分词器时,添加自定义词的时候,有时候不起作用的现象的
我们在使用paoding分词的时候都需要删除.compile文件夹,所以好奇的我就打开了这个文件夹,发现了名字为most-words-mode的文件夹,从名字我们可以看出
这是庖丁分词的模式,即most-words模式,查看此文件夹下的vocabulary.dic.compiled的内容,发现是在上一篇博客中添加的“中国科”之所以起作用,是因为在这
个文件中包含“中国科”这个词,其余不起作用的词是因为此编译文件没有收录进来。
查了资料,发现庖丁有两种分词模式:
most-words:最大词量分词方式,此模式对应的词典编译类为MostWordsModeDictionariesCompiler
max-word-length:按词在词典中的原序来进行编译,基本不再做其他处理,此模式对应的词典编译类为SortingDictionariesCompiler
可以看出most-words是默认的分词模式。
为了解决我的问题,即分词结果必包含我自定义的词,所以我将分词模式更改了一下,修改步骤:
找到你工程中引入的paoding-analysis.jar,将其打开,你会看到这样的一个配置文件paoding-analyzer.properties
打开此文件,内容如下:
#PaodingAnlyzer Mode, "most-words", "max-word-length", "class:com.xxx.MyTokenCollectorImpl"...
#paoding.analyzer.mode=most-words
#paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.MostWordsModeDictionariesCompiler
#paoding.analyzer.mode=max-word-length
#paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.SortingDictionariesCompiler
我们需要做的就是去掉最后一行的注释,即去掉#,文件内容变为:
#PaodingAnlyzer Mode, "most-words", "max-word-length", "class:com.xxx.MyTokenCollectorImpl"...
#paoding.analyzer.mode=most-words
#paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.MostWordsModeDictionariesCompiler
#paoding.analyzer.mode=max-word-length
paoding.analyzer.dictionaries.compiler=net.paoding.analysis.analyzer.impl.SortingDictionariesCompiler
删掉.compile文件
然后用我上一篇博客中的代码去测试分词效果:
这是未添加任何自定义分词后,Sort模式的分词效果
中国
科技
大
大学
科技大学
中国科技大学
然后我将“科技大”,“中国科技大”加入到字典中,分词效果如下:
中国
科技
大
科技大
中国科技大
大学
科技大学
中国科技大学
通过上面结果的对比,可以发现,添加的自定义词都分出来了,满足了我的需求,同时发现,Sort模式是在most模式的基础上,在按照字典中的词,再来一遍分词,所以分词的结果数也多很多