[分词] 基于 Lucene8 版本的混合分词器 (分词合并)
介绍
近期在研究 NLP 相关技术,再次感受到中文领域分词算法的重要性,突然想到一年前在项目中使用到的 Lucene 技术中关于分词器的部分,对其再次进行对比分析,并混合多种现有分词方法,获得更多词项。
背景
目前在 Lucene 中使用较多的 IK 分词,但遇到古文的话分词效果并不好,会造成检索结果达不到要求。
在实际使用 Lucene 的过程中,很难对同一个字段同时使用多种分词算法。
NGram 算法虽然能够获得更多的词项,但是划分的词项太多,造成检索过程中的效率问题。
解决方案
采用自定义分词器的思路,合并多种分词器为一个,从而获得更多词项,后续在整合 Lucene 的时候,使用此分词器从而得到更好地效果。
实现代码
详见如下测试代码,此代码调用自定义分词器,对输入字符串分别进行 IKAnalyzer 和 WhitespaceAnalyzer 两种分词并合并,如果遇到其他需求,可以合并其他分词器,最终达到理想效果。
核心代码详见 CustomTokenizer.java 文件。完整代码详见:pap-lucene-spring-boot-starter
复制代码
复制代码
总结
此代码在 Lucene8.6.2 版本下通过测试,采用自定义分词器的方式,通过合同多种分词器的方式,达到更广泛的分词结果,从而变相提升检索过程中的覆盖率。
参考
版权声明: 本文为 InfoQ 作者【alexgaoyh】的原创文章。
原文链接:【http://xie.infoq.cn/article/ece2ce46071cdc4272de4256c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论