中间件-ES-中文拼音多音字插件

2024-01-22 01:18

本文主要是介绍中间件-ES-中文拼音多音字插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求背景:中文拼音多音字分词。例如:三一重工,默认拼音分词会解析成sanyizhonggong,但业务需要的是解析成:sanyizhonggong、sanyichonggong。

解决办法:

首先,查看了ES用的中文拼音插件elasticsearch-analysis-pinyin的github中的issue,是有人提出类似需求,但也没有合适的方案:https://github.com/medcl/elasticsearch-analysis-pinyin/issues。

然后:百度了各方面资料,没有找到现成解决方案。但找到一个觉得相对靠谱的解决思路,

https://blog.csdn.net/huochen1994/article/details/88876230。

解决方案:

1、分析当前ES是如何实现的中文拼音分词。

ES用的中文拼音插件是:elasticsearch-analysis-pinyin,它底层用的是nlp-lang来实现的自然语言分词。根据ES的版本从github上下载了对应版本的插件源代码,代码修改主要涉及到了:elasticsearch-analysis-pinyin-5.x、nlp-lang-1.7.8。

1)拼音分词插件AnalysisPinyinPlugin,它通过实现ES的org.elasticsearch.plugins.AnalysisPlugin、org.elasticsearch.plugins.Plugin,纳入了ES插件体系。如下图,其中“pinyin”就是默认拼音分词的实现。我的想法是仿照“pinyin”分词实现一个多音字的拼音分词,例如叫“multiple_by_pinyin”。这样如果需要使用多音字分词的话,在索引的settings时选择多音字的分词即可。而那些使用默认的pinyin分词的用户也不会受影响。

2、简单描述下实现

下图用类图描述下核心类的关系,可见PinyinTokenizerForMultiple是分词的核心:

在PinyinTokenizerForMultiple中使用了nlp-lang的Pinyin.java来实现中文分词,如下图:

3、测试效果

1)默认分词效果:

入参:

结果:

2)多音字分词效果

入参:同上,其中analyzer输入多音字分词插件。

结果:重分词成 chong、zhong

使用注意:不能支持大字段的多音字分词,限制在100个汉字以内。

这篇关于中间件-ES-中文拼音多音字插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/631429

相关文章

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Python3中Sanic中间件的使用

《Python3中Sanic中间件的使用》Sanic框架中的中间件是一种强大的工具,本文就来介绍Python3中Sanic中间件的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录Sanic 中间件的工作流程中间件的使用1. 全局中间件2. 路由中间件3. 异常处理中间件4. 异步中间件5. 优先级

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl