一个简单的汉字搜索匹配示例(支持拼音、首字母简写)

在社交应用中,很多场景下需要用到搜索,以微信的搜索通讯录为例。好友自己有昵称,我们可能给他/她备注一个昵称,在输入:拼间、首字母、原文时都应该能匹配到(匹配优先是备注然后才是原来的昵称)。这里以‘芈月传’为例,‘芈’不是常见字,所以输入:myz或者miyuezhuan或者芈月传,都应该能匹配到‘芈月传’这个结果。当然不一定需要全部写完,比如输入:my的时候就应该能匹配到‘芈月传’了。针对多音字的话,可能会麻烦一些,不过也可以解决(在下面的例子之上再进行扩展即可),一般场景下单音已经解决90%以上的问题了,不建议搞的特别复杂。

 

下面例子的思路是input:原文,output:[全拼,首字母,原文],使用indexOf或者正则忽略大小写对searchKey进行匹配,只要命中一个则认为匹配到了。比如[‘ruyichuan’,’ryc’,’如懿传’],要搜索‘如懿传’,因为中间那个字比较难写,所以我可能会打:ry或者ruyi,此时就应该能匹配到’如懿传’了,做的更好一些就是匹配的字进行标红,那么第一项‘ruyichuan’就应该是数组而不是字符串了。下面这个例子比较取巧,有需要的童鞋可以做为一个参考 :)

 

See the Pen simple_pinyin by Meteoric (@zhangyi) on CodePen.

时间: 2024-10-16 07:50:53

一个简单的汉字搜索匹配示例(支持拼音、首字母简写)的相关文章

通过pinyin4j将汉字转换为全拼 和 拼音首字母

/** * 汉字转换为拼音 包含多音字,包含生母zh,ch,sh的 */ public void toPinYinAll(){ String initials = "zh,ch,sh"; //返回汉语拼音的全拼 List<String> result = new ArrayList<String>(); //返回汉语拼音的单拼 List<String> firstResult = new ArrayList<String>(); resu

Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)

一.先摆需求: 1.中文搜索.英文搜索.中英混搜   如:"南京东路","cafe 南京东路店" 2.全拼搜索.首字母搜索.中文+全拼.中文+首字母混搜   如:"nanjingdonglu","njdl","南京donglu","南京dl","nang南东路","njd路"等等组合 3.简繁搜索.特殊符号过滤搜索   如:"龍馬&quo

C# 获取汉字的拼音首字母(转)

原文:https://blog.csdn.net/younghaiqing/article/details/62417269 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手动把该汉字移动到对应的拼音首字母队列,我们这里介绍第二种. 获取汉字拼音的首字母是一个在做项目的过程中经常需要用到的功能,今天我们主要来探讨下C# 获取汉字的拼音首字母 static void Main

一个简单的负载均衡的示例

参考地址:http://www.nginx.cn/doc/example/loadbanlance.html 一个简单的负载均衡的示例,把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上.> http { : upstream myproject { : server 127.0.0.1:8000 weight=3; : server 127.0.0.1:8001; : server 127.0.0.1:8002; : server 127.0.0.1:8003;

【Solr】 solr对拼音搜索和拼音首字母搜索的支持

问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的.  用lucene实现 1.建索引, 多建一个索引字段,即拼音和拼音首字母这2个字段.合并的一个字段.  (拼音和拼音首字母,可以通过pinyin4j.jar.将想要进行拼音搜索的字段进行拼音转换.) 2.对输入的参数判断是否是拼音,(可以通过将传人的值转换为 utf-8 形式,如果转换后的字符串长度大于原来的字符串的长度,那么就不是拼音.否则就进行拼

简单测试--C#实现中文汉字转拼音首字母

第一种: 这个是自己写的比较简单的实现方法,要做汉字转拼音首字母,首先应该有一个存储首字母的数组,然后将要转拼音码的汉字与每个首字母开头的第一个汉字即"最小"的汉字作比较,这里的最小指的是按拼音规则比较最小,例如a比h小,所以"爱"比"恨"小,同一个字母开头的拼音比较大小以此类推.最后实现的结果是只转汉字,对于中文特殊字符.标点符号和英文都原样输出,不转码. 实现方法如下: 1 using System; 2 using System.Colle

利用排序规则特点计算汉字笔划和取得拼音首字母

SQL SERVER的排序规则平时使用不是很多,也许不少初学者还比较陌生,但有一个错误大家应是经常碰到: SQL SERVER数据库,在跨库多表连接查询时,若两数据库默认字符集不同,系统就会返回这样的错误:     "无法解决 equal to 操作的排序规则冲突." 一.错误分析: 这个错误是因为排序规则不一致造成的,我们做个测试,比如:create table #t1(name varchar(20) collate Albanian_CI_AI_WS, value int) cr

java获取汉字拼音首字母 --转载

在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Title: ChineseCharToEn * @date 2004-02-19 注:只支持GB2312字符集中的汉字 */ public final class ChineseCharToEn { priv

【JAVA】获取汉字拼音首字母

最近在做通讯录的时候,需要把姓转换为拼音字母 1-9 a-z A-Z 转换为#:借张微信的图大家感受下 网上的代码很多,不外乎两种 1:pinyin4java包太大 2:大部分不支持生僻字,比如“栾.鑫” 认不出 本方案解决了这个问题,就很简单一个helper类,注意,只是拼音首字母哦!且编码格式为GBK! 代码很简单,就是在正常GBK检索不到的生僻字上,再加入一个字典,如果GBK检索不到,则在字典里找. package zhexian.app.smartcall.Utils; import j