lucene6.6+拼音分词+ik分词实现
2017-09-27 15:23
363 查看
原来项目使用的是solr进行建立索引与查询,最近想改为lucene。对于最新版的lucene网上的资料没有solr多,并且solr很多功能直接配置就可以使用,但是lucene都要通过api进行封装使用。下面是自己使用lucene6.6+拼音分词和ik中文分词实现的功能:
主要工具包:
在lucene中有自带的中文分词器但是效果一般,使用ik可以自定义自己的分词包dic,分词包直接决定了分词效果的好坏。
自定义一个分词类IndexPinyinAnalyzer继承Analyzer,也可以直接使用pinyinAnalyzer.jar中的PinyinAnalyzer类进行分词,但是他里面使用的mmseg4j中文分词,所以我在这自定义一个analyzer去将他的中文分词替换为ik分词,这部分看一下源码不难理解。
ik分词源码中通过IKAnalyzer.cfg.xml配置来加载自定义的分词包dic,IKAnalyzer.cfg.xml与mydict.dic和stopword.dic放在项目的src/main/resources下,就可以直接加载。建立好自己的分词类,在lucene建立索引时就可以直接使用这个analyzer,同时在查询索引时也可以使用这个analyzer。分词的效果如下:
主要工具包:
lucene6.6相关jar包 pinyinAnalyzer.jar ik-analyzer-solr6.x.jar pinyin4j-2.5.0.jar IKAnalyzer.cfg.xml mydict.dic stopword.diclucene的jar包可以通过maven直接构建下载,其他三个包下载地址。其中ik的分词包是修改过重新打包已适用于6.0以上的solr和lucene版本。在solr中的拼音分词器是在managed-schema文件中配置的:
<!-- 中文与拼音分词--> <fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="0"> <analyzer type="index"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/> <filter class="utn.index.mmseg.solr.PinyinTokenFilterFactory" minTermLength="2" pinyinAll="true" outChinese="true"/> </analyzer> <analyzer type="query"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" userSmart="true"/> <filter class="utn.index.mmseg.solr.PinyinTokenFilterFactory" minTermLength="2" pinyinAll="true" outChinese="true"/> </analyzer> </fieldType>
在lucene中有自带的中文分词器但是效果一般,使用ik可以自定义自己的分词包dic,分词包直接决定了分词效果的好坏。
自定义一个分词类IndexPinyinAnalyzer继承Analyzer,也可以直接使用pinyinAnalyzer.jar中的PinyinAnalyzer类进行分词,但是他里面使用的mmseg4j中文分词,所以我在这自定义一个analyzer去将他的中文分词替换为ik分词,这部分看一下源码不难理解。
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.Tokenizer; import org.wltea.analyzer.lucene.IKTokenizer; import utn.index.mmseg.analysis.PinyinTokenFilter; /** * @author sggq * @Date 2017年9月22日 * @Description 自定义分词Analyzer:ik中文分词+拼音分词 */ public class IndexPinyinAnalyzer extends Analyzer { private boolean userSmart; public IndexPinyinAnalyzer(boolean userSmart){ this.userSmart = userSmart; } @Override protected TokenStreamComponents createComponents(String fieldName) { Tokenizer tokenizer = new IKTokenizer(userSmart); TokenStream tokenStream = new PinyinTokenFilter(tokenizer, true, true, 2); return new Analyzer.TokenStreamComponents(tokenizer, tokenStream); } }
ik分词源码中通过IKAnalyzer.cfg.xml配置来加载自定义的分词包dic,IKAnalyzer.cfg.xml与mydict.dic和stopword.dic放在项目的src/main/resources下,就可以直接加载。建立好自己的分词类,在lucene建立索引时就可以直接使用这个analyzer,同时在查询索引时也可以使用这个analyzer。分词的效果如下:
加载扩展词典:mydict.dic 加载扩展停止词典:stopword.dic 中华人民共和国 zhonghuarenmingongheguo zhonghuarenmingonghaiguo zhrmghg zhonghuarenmingonghuguo zhonghuarenmingonghuoguo 中华人民 zhrm zhonghuarenmin 中华 zhonghua zh 华人 huaren hr 人民共和国 renmingonghaiguo renmingonghuoguo renmingonghuguo rmghg renmingongheguo 共和国 gongheguo ghg gonghuoguo gonghaiguo gonghuguo 共和 gh gonghai gonghuo gonghe gonghu 国
相关文章推荐
- Elasticsearch1.x 基于lc-pinyin和ik分词实现 中文、拼音、同义词搜索
- lucene集成IK实现中文分词检索
- lucene集成IK实现中文分词检索
- lucene的简单的项目实现ik分词和高亮显示
- lucene的简单的项目实现ik分词和高亮显示
- lucene的实战项目——实现ik分词和高亮显示
- Wvtool学习(四):实现wvtool与IK_Analyzer的分词结合
- Lucene自定义分词算法实现
- IK分词源码讲解(六)-IK结合lucene使用并进行TF、IDF处理
- 【盘古分词】Lucene.Net 盘古分词 实现公众号智能自动回复
- IKAnalyzer结合Lucene实现中文分词(示例讲解)
- 在三大框架里运用lucene和ik分词是报java.lang.reflect.InvocationTargetException异常的解决方法
- 使用LUCENE快速实现属于自己的英文分词程序——附简单实现
- elasticsearch实现中文分词和拼音分词混合查询+CompletionSuggestion
- Lucene实现自定义分词器
- Beta笔记——搜索引擎的设计与实现(1):使用Lucene.Net建立索引与中文分词
- ]NET Core Lucene.net和PanGu分词实现全文检索
- Lucene5中编写自定义同义词分词器(基于IK中文分词器)
- Lucene下引入ICTCLAS进行中文分词的实现方法
- Lucene.Net与盘古分词实现站内搜索