ava实现汉字转拼音,多音字处理

文章讲述了从前端直接获取城市列表到改为后端提供按首字母分组的城市查询接口的转变。在处理多音字问题上,先尝试了pinyin4j,但由于其对多音字支持不足,于是转向使用hanlp库,通过PinyinUtil工具类实现中文到拼音的转换,包括获取完整拼音和首字母,有效解决了多音字问题。
摘要由CSDN通过智能技术生成

背景:
之前一直是前端直接调用公司公共城市组件获取城市列表,现在由于公共组件不再支持,需要由后端接口提供城市查询,并且按照城市首字母分组展示。

后端实现:
最开始选择pinyin4j来实现,但发现对多音字的处理不太友好,比如需要转重庆的拼音(可以看到结果并不是我们想要的):

解决方法就需要自己定义多音字字典来实现,解析这个文件优先从这个文件中获取拼音,类似如下文件(字典格式可自行定义):

以上自己定义字典的方式比较麻烦,经过在网上的一顿搜索,发现可以使用具有语义的依赖包(底层也是用的自定义字典实现):

<dependency>
    <groupId>com.hankcs</groupId>
    <artifactId>hanlp</artifactId>
    <version>portable-1.8.3</version>
</dependency>
复制代码

在项目中定义一个工具类:

public class PinyinUtil {

    /**
     * 获取中文完整拼音
     *
     * @param chineseStr
     * @return
     */
    public static String getPinyin(String chineseStr) {
        List<Pinyin> pinyins = PinyinDictionary.convertToPinyin(chineseStr);
        StringBuilder stringBuilder = new StringBuilder();
        for (Pinyin pinyin : pinyins) {
            stringBuilder.append(pinyin.getPinyinWithoutTone());
        }
        return stringBuilder.toString();
    }


    /**
     * 获取中文拼音首字母
     *
     * @param chineseStr
     * @return
     */
    public static String getInitial(String chineseStr) {
        List<Pinyin> pinyins = PinyinDictionary.convertToPinyin(chineseStr);
        if (CollectionUtils.isEmpty(pinyins)) {
            return StringUtils.EMPTY;
        }
        return String.valueOf(pinyins.get(0).getPinyinWithoutTone().charAt(0));
    }
}
复制代码

结果演示:

更多方法使用:

好了,到此结束。简单直接,没有一个字是多余的。😄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值