Java实战之城市多音字处理

网友投稿 241 2023-01-18

Java实战之城市多音字处理

一、需求

对城市名称转化为拼音的时候,当遇到多音字城市的时候,转化拼音就不是我们想要的了。

使用  pinyin4j 无法直接解决这个问题。 。网上有很多维护多音字信息的,觉得麻烦。

如:

长沙 ====>"zhangsha"

厦门===>"shamen"

重庆===>"zhongqing"

二、导入 jpinyin

版本自选

com.github.stuxuhai

jpinyin

1.1.8

三、直接创建工具类(不需要其他操作)

import com.github.stuxuhai.jpinyin.ChineseHelper;

import com.github.stuxuhai.jpinyin.PinyinFormat;

import com.github.stuxuhai.jpinyin.PinyinHelper;

/**

* @Description:

* @Date: 2021/4/27 16:26

* @Author: luch

* @Version: 1.0

**/

public class ChangeToPinYinJPinYin {

/**

* 转换为有声调的拼音字符串

*

* @param pinYinStr 汉字

* @return 有声调的拼音字符串

*/

public static String changeToMarkPinYin(String pinYinStr) {

WdjJd String tempStr = null;

try {

tempStr = PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_MARK);

} catch (Exception e) {

e.printStackTrace();

}

return tempStr;

}

/**

* 转换为数字声调字符串

*

* @param pinYinStr 需转换的汉字

* @return 转换完成的拼音字符串

*/

public static String changeToNumberPinYin(String pinYinStr) {

String tempStr = null;

try {

tempStr = PinyinHelper.convertToPinyinString(pinYinStr, " ", PinyinFormat.WITH_TONE_NUMBER);

} catch (Exception e) {

e.printStackTrace();

}

return tempStr;

}

/**

* 转换为不带音调的拼音字符串

*

* @param pinYinStr 需转换的汉字

* @return 拼音字符串

*/

public static String changeToTonePinYin(String pinYinStr) {

String tempStr = null;

try {

http:// tempStr = PinyinHelper.convertToPinyinString(pinYinStr, "", PinyinFormat.WITHOUT_TONE);

} catch (Exception e) {

e.printStackTrace();

}

return tempStr;

}

/**

* 转换为每个汉字对应拼音首字母字符串

*

* @param pinYinStr 需转换的汉字

* @return 拼音字符串

*/

public static String changeToGetShortPinYin(String pinYinStr) {

String tempStr = null;

try {

tempStr = PinyinHelper.getShortPinyin(pinYinStr);

} catch (Exception e) {

e.printStackTrace();

}

return tempStr;

}

/**

* 检查汉字是否为多音字

*

* @param pinYinStr 需检查的汉字

* @return true 多音字,false 不是多音字

*/

public static boolean checkPinYin(char pinYinStr) {

boolean check = false;

try {

check = PinyinHelper.hasMultiPinyin(pinYinStr);

} catch (Exception e) {

e.printStackTrace();

}

return check;

}

/**

* 简体转换为繁体

*

* @param pinYinStr

* @return

*/

public static String changeToTraditional(String pinYinStr) {

String tempStr = null;

try {

tempStr = ChineseHelper.convertToTraditionalChinese(pinYinStr);

} catch (Exception e) {

e.printStackTrace();

}

return tempStr;

}

/**

* 繁体转换为简体

*

* @param pinYinSt

* @return

*/

public static String changeToSimplified(String pinYinSt) {

String tempStr = null;

try {

tempStr = ChineseHelper.convertToSimplifiedChinese(pinYinSt);

} catch (Exception e) {

e.printStackTrace();

}

return tempStr;

}

}

四、直接测试代码

public static void main(String[] args) {

String str = "长沙市";

System.out.println("转换为有声调的拼音字符串:"+changeToMarkPinYin(str));

System.out.println("转换为不带音调的拼音字符串:"+changeToTonePinYin(str));

String strFanTi="誰是程序員";

System.out.println("繁体转换为简体:"+changeToSimplified(strFanTi));

System.out.println("重"+"重是否是多音字:"+checkPinYin('重'));

System.out.println("厦"+"是否是多音字:"+checkPinYin('厦'));

System.out.println("鼠"+"是否是多音字:"+checkPinYin('鼠'));

}

输出结果,下面不同字的中间是否有空格,这个可以自己设置的

五、源码分析

5.1 字典对应信息

分别是:从上到下分别是

1.繁体-简体对应表

2.多音字

3.带音标的拼音

5.2 6个处理类

5.3 处理模式

点开

com.github.stuxuhai.jpinyin.PinyinResource#getPinyinResource

有三个方法分别加载了这几个资源

然后通过

com.github.stuxuhai.jpinyin.ChineseHelper

通过一个键值对获取。加载处理而已。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IDEA 2021版新建Maven、TomCat工程的详细教程
下一篇:Java实战之敏感词过滤器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~