Lucene笔记18-Lucene的分词-实现自定义同义词分词器-思路分析

本文分析了自定义同义词分词器的设计思路,通过创建MyTokenFilter类继承TokenFilter,实现在获取tokenStream前的处理,添加同义词到相同位置,流程图及代码见正文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现自定义同义词分词器思路分析

前面文章我们提到同义词分词器,这里我们先来分析下同义词分词器的设计思路。

  1. 首先我们有一个需要分词的字符串string,通过new StringReader(string)拿到Reader。
  2. 使用analyzer.tokenStream("content", new StringReader(string))拿到tokenStream,前面讲到tokenStream中包含了分词相关的详细信息。
  3. 现在需要做的就是,在拿到tokenStream之前,做一些处理,在获取tokenStream之前,需要经过Tokenizer和TokenFilter这两个类的处理,我们需要在TokenFilter中做一些处理。
  4. 于是自定义一个MyTokenFilter类,继承自TokenFilter类,并在初始化方法中,将CharTermAttribute对象添加进去,这样,再获取的时候,就可以输出分词信息了。
  5. 另外,还需要将PositionIncrementAttribute对象添加进去,因为在添加同义词的时候,要把同义词和原来的词放在同一个位置上。
  6. 假设我们有一个map,里面存储的就是同义词词库,比如{"北大"="北京大学"}这种类似的数据。第4步获取到分词信息后,就去这个map中去找,如果有同义词,就将这个同义词添加到第5步获取到的位置上。

二、根据流程做图

大致做了个流程图,发现自己做图能力好差啊,以后写博客还要多加练习,通常图像带给人的感觉更直观一些。

另外附上在线做图地址:Process On

详细代码请看下一节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值