IKAnalyzer 3.2通过List方式加入自定义词典

首先我们查看IKAnalyzer的源码,看词典存储位置:

 

class DictSegment implements Comparable<DictSegment>{
	
	//公用字典表,存储汉字
	private static final Map<Character , Character> charMap = new HashMap<Character , Character>(16 , 0.95f);
	//数组大小上限
	private static final int ARRAY_LENGTH_LIMIT = 3;
..................
}

 我们可以看到org.wltea.analyzer.dic.DictSegment.charMap是用来公用字典表,存储汉字,那么我们可以在加载词典的时候清空之。

在加入词典的时候可以通过配置文件的方式,但是一般不很现实,有时候需要用户维护动态的字典,那么字典就应该以List的形式加入,我们发现Dictionary.loadExtendWords(List extWords)可以以List的形式加入,代码如下:

 

	Dictionary.loadExtendWords(Utils.getDicList());

 综上整体代码如下:

 

Class ownerClass = Class.forName("org.wltea.analyzer.dic.DictSegment");
Field fs = ownerClass.getDeclaredField("charMap");
fs.setAccessible(true);
Map map = (Map) fs.get(ownerClass);
map.clear();
Dictionary.loadExtendWords(Utils.getDicList());

 PS:上述代码仅适用IKAnalyzer 3.2.*,发现2012的代码已经修改成单利了,同时接口变动比较大,采用100w的文章对之切词发现速度没有声明的那么快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值