一、实现自定义同义词分词器思路分析
前面文章我们提到同义词分词器,这里我们先来分析下同义词分词器的设计思路。
- 首先我们有一个需要分词的字符串string,通过new StringReader(string)拿到Reader。
- 使用analyzer.tokenStream("content", new StringReader(string))拿到tokenStream,前面讲到tokenStream中包含了分词相关的详细信息。
- 现在需要做的就是,在拿到tokenStream之前,做一些处理,在获取tokenStream之前,需要经过Tokenizer和TokenFilter这两个类的处理,我们需要在TokenFilter中做一些处理。
- 于是自定义一个MyTokenFilter类,继承自TokenFilter类,并在初始化方法中,将CharTermAttribute对象添加进去,这样,再获取的时候,就可以输出分词信息了。
- 另外,还需要将PositionIncrementAttribute对象添加进去,因为在添加同义词的时候,要把同义词和原来的词放在同一个位置上。
- 假设我们有一个map,里面存储的就是同义词词库,比如{"北大"="北京大学"}这种类似的数据。第4步获取到分词信息后,就去这个map中去找,如果有同义词,就将这个同义词添加到第5步获取到的位置上。
二、根据流程做图
大致做了个流程图,发现自己做图能力好差啊,以后写博客还要多加练习,通常图像带给人的感觉更直观一些。
另外附上在线做图地址:Process On
详细代码请看下一节。