ElasticSearch pinyin分词支持多音字

本文介绍了在ElasticSearch中遇到的拼音分词无法支持多音字的问题,以及如何通过修改nlp-lang和elasticsearch-analysis-pinyin插件来实现多音字的全面拼音匹配。调整包括在nlp-lang中增加获取多音字所有读音的方法,以及在elasticsearch-analysis-pinyin中创建新的分词器类型。虽然这种方法可能导致分词结果过多,但在限定的物品名称长度下,目前未出现性能问题。
摘要由CSDN通过智能技术生成

ElasticSearch pinyin分词支持多音字

背景

我们有一个搜索业务底层采用ElasticSearch作为搜索引擎,在索引的过程中,使用了ik中文分词拼音分词同义词等多种分词器。ES和各种插件的组合已经能满足我们线上90%的需求,但是仍有部分需求无法覆盖,我们在拼音分词的时候过程中就遇到了无法解决的问题。

比如在 三一重工 中,一重 这个词在拼音词库 polyphone.txt 中有对应的词汇,读作 yichong,因此这整个词的读音为 sanyichonggong, 但是其真实读音应该为 sanyizhonggong。这是因为在拼音分词过程中会先去词库中检索是否有对应的词汇,没有的话再用单字拼音代替最后拼接在一起。

再比如在 蔚来汽车 中,蔚来 算是一个新词,在拼音词库 polyphone.txt 中没有对应的词汇,因此这个词对应的拼音是每个字的拼音拼接而成,结果为 yulai 。但是其真实读音应该为 weilai, 那么我们的用户就无法通过拼音 weilai 搜索到相关的内容。

经过查看拼音分词源代码发现,拼音分词其实是调用nlp-lang这个项目里的方法实现的分词器。而这个nlp-lang项目中,拼音解析如果遇到多音字仅仅返回第一个拼音,这样很多读音都无法获取到。

if(temp.length()==1){
   
    //单个字取第一个拼音
    lists.add(PinyinFormatter.formatPinyin(word.getParam()[0], format));
} else {
   
    for 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值