精华内容
下载资源
问答
  • 多音字

    2020-11-29 16:02:56
    <div><p>能识别常州市,不能识别长沙市,长春市,还有其他个别的也是这样!大神 ,应该怎么改呀,谢谢~</p><p>该提问来源于开源项目:mcxtzhang/SuspensionIndexBar</p>...
  • 常用多音字大全

    2021-01-21 05:04:12
    常用多音字大全(A部) 1. 阿①ā 阿罗汉阿姨②ē 阿附阿胶 2. 挨①āi 挨个挨近②ái 挨打挨说 3. 拗①ào 拗口②niǜ 执拗 常用多音字大全(B部) 1. 扒①bā 扒开扒拉②pá 扒
  • 还在四处寻找有关于你能准确的读出这些多音字吗?整理发布的这一款你能准确的读出这些多音字定...该文档为你能准确的读出这些多音字,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 多音字的学习方法总结 在我们的语文考试里面,第一题一部分就是考察。词语的语音和字形的,很多学生对于这一题的考查总是感到非常的头痛。汉字的语音和字形总是多变的,学生不知道如何对于这些题型进行总结。下面是...
  • 多音字姓名拼音表.txt

    2019-08-01 11:21:23
    百家姓当中多音字的拼音表,用于通讯录名称排序使用。
  • 完整版如何取多音字姓名的所有首拼音字母.rar
  • 汉字多音字汇总

    2012-11-21 14:55:16
    汉字多音字汇总,编译汉字转拼音的相关搜索使用
  • android 汉字转拼音带多音字识别功能,供大家参考,具体内容如下 问题来源 在做地名按首字母排序的时候出现了这样一个bug。长沙会被翻译拼音成zhangsha,重庆会被翻译拼音成zhong qing。于是排序出了问题。 汉字...
  • 完整版如何取多音字姓名的所有首拼音字母.e.rar
  • 几年前就在网上看到过汉字转拼音的程序,大都就是按汉字的编码转换,单字对应的算法实现的。但是都有一个共同的缺点,不能支持多音字。本篇文章主要介绍了C#汉字转拼音实例(支持多音字),有兴趣的可以了解一下。
  • 城市/通讯录/姓名字母快速定位多音字的部分处理.怎么处理我写了一个word文档.里面有截图很详细.按步骤自己修改.不懂可以私信我
  • 汉字转拼音首字母(UTF-8支持多音字,GB2312不支持多音字),程序hz2py_GB2312_Non-polyphone.cpp在Windows系统下VC 6.0运行通过,程序hz2py_UTF-8_Polyphone.c在Ubuntu的Linux系统下运行通过,前者不支持多音字,后者...
  • 汉字转拼音全拼 支持多音字识别
  • java准确读取多音字的方法。多音字读取一直都是个问题,笔者搜索了很多方法,结合这些方法的原理,完成了准确读取Pinyin的帮助方法。
  • 汉字转拼音,包含多音字的转换,开头字母的大写。
  • 在使用讯飞webapi方式进行语音合成时,发现多音字经常不按语义进行发音,在讯飞论坛上找了半天,按论坛上的方法不起作用,反复试了一下,用下面组合可以起作用。 一、后台参数配置 后台主要涉及3个参数,ttp:cssml...

    在使用讯飞webapi方式进行语音合成时,发现多音字经常不按语义进行发音,在讯飞论坛上找了半天,按论坛上的方法不起作用,反复试了一下,用下面组合可以起作用。

    一、后台参数配置

    后台主要涉及3个参数,ttp:cssml;tte:UTF8;vcn:vixy,我是用JAVA编程,用WEBAPI,用这三个参数组合,前端用简单标记可以生效。ttp这个参数在官方的说明中没有,论坛中有介绍。

    //填充business,AUE属性lame是MP3格式,raw是PCM格式
        business.addProperty("aue", "lame");
        //增加此参数,系统可以识别用cssml标记的多音字读法,下面发音人用vixy,用简单标记
        business.addProperty("ttp", "cssml");
        business.addProperty("sfl", 1);
        business.addProperty("tte", "UTF8");//小语种必须使用UNICODE编码
        business.addProperty("vcn", "vixy");//到控制台-我的应用-语音合成-添加试用或购买发音人,添加后即显示该发音人参数值,若试用未添加的发音人会报错11200
        business.addProperty("pitch", 50);
        business.addProperty("speed", 50);
    

    二、文字标记方法

    1)、设置单词发音方式。方法如下:

    1. 格式: [h*] (*=0/1/2)
    2. 参数: 0 – 自动判断单词发音方式
      1 – 字母发音方式
      2 – 单词发音方式
    3. 说明: 默认单词为自动判断。

    文本举例:

    1. [h1]hello[h0] word

    其中,hello将会按照字母发音,word就会按照单词进行发音

    2)、数字处理策略。方法如下:

    1. 格式: [n*] (*=0/1/2)
    2. 参数: 0 – 自动判断
      1 – 数字作号码处理
      2 – 数字作数值处理
    3. 说明: 默认为自动判断。

    文本举例:

    1. [n2]123[n1]456[n0]

    其中,123将会按照数值处理,456则会按照号码处理,而后的文本中的数字,均会自动判断。

    3)、合成时,加入静音停顿。方法如下:

    1. 格式: [p*] (*=无符号整数)2. 参数: * – 静音的时间长度,单位:毫秒(ms)

    文本举例:

    1. 你好[p500]科大讯飞

    该句合成时,将会在“你好”后加入500ms的静音

    4)、指定汉字发音。方法如下:

    1. 格式: [=] (=拼音/音标)
    2. 参数: * – 为前一个汉字/单词设定的拼音/音标
    3. 说明: 汉字:声调用后接一位数字1~5分别表示阴平、阳平、上声、去声和轻声5个声调。

    文本举例:

    1. 着[=zhuo2]手, 朴[=piao2]槿惠,朴[=pu3]树
    展开全文
  • 生成拼音,可获取句子或单字的拼音组合/首字母等,含多音字组合,需要引用ChnCharInfo.dll
  • C# 汉字转拼音 支持多音字

    热门讨论 2013-03-26 11:56:28
    C# 汉字转拼音 支持多音字
  • 提供 hutool.jar工具包和多音字词典资源文件下载。不喜勿喷!欢迎留言沟通交流。
  • 通讯录姓氏多音字的问题解决 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/shan286/article/details/79400558 之前做了通讯录的...

    通讯录姓氏多音字的问题解决
    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/shan286/article/details/79400558
    之前做了通讯录的功能,发现多音字的姓氏在错误的字母下面,比如曾(zeng)在C字母下面,所以自己在原来的代码上做了优化,废话不多说,我这里也只是记录一下,所以直接贴代码。

    package com.sherry.contact.util;

    import android.text.TextUtils;
    import android.util.Log;

    import java.text.Collator;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Locale;
    import java.util.Map;

    /**

    • Created by shanxs on 2018/2/28.
      */

    public class HanziNameToPinyin {

    private static final String TAG = "HanziNameToPinyin";
    
    // Turn on this flag when we want to check internal data structure.
    private static final boolean DEBUG = false;
    
    /**
     * Unihans array.
     *
     * Each unihans is the first one within same pinyin when collator is zh_CN.
     */
    public static final char[] UNIHANS = { '\u963f', '\u54ce', '\u5b89',
            '\u80ae', '\u51f9', '\u516b', '\u6300', '\u6273', '\u90a6',
            '\u52f9', '\u9642', '\u5954', '\u4f3b', '\u5c44', '\u8fb9',
            '\u706c', '\u618b', '\u6c43', '\u51ab', '\u7676', '\u5cec',
            '\u5693', '\u5072', '\u53c2', '\u4ed3', '\u64a1', '\u518a',
            '\u5d7e', '\u66fd', '\u66fe', '\u5c64', '\u53c9', '\u8286',
            '\u8fbf', '\u4f25', '\u6284', '\u8f66', '\u62bb', '\u6c88',
            '\u6c89', '\u9637', '\u5403', '\u5145', '\u62bd', '\u51fa',
            '\u6b3b', '\u63e3', '\u5ddb', '\u5205', '\u5439', '\u65fe',
            '\u9034', '\u5472', '\u5306', '\u51d1', '\u7c97', '\u6c46',
            '\u5d14', '\u90a8', '\u6413', '\u5491', '\u5446', '\u4e39',
            '\u5f53', '\u5200', '\u561a', '\u6265', '\u706f', '\u6c10',
            '\u55f2', '\u7538', '\u5201', '\u7239', '\u4e01', '\u4e1f',
            '\u4e1c', '\u543a', '\u53be', '\u8011', '\u8968', '\u5428',
            '\u591a', '\u59b8', '\u8bf6', '\u5940', '\u97a5', '\u513f',
            '\u53d1', '\u5e06', '\u531a', '\u98de', '\u5206', '\u4e30',
            '\u8985', '\u4ecf', '\u7d11', '\u4f15', '\u65ee', '\u4f85',
            '\u7518', '\u5188', '\u768b', '\u6208', '\u7ed9', '\u6839',
            '\u522f', '\u5de5', '\u52fe', '\u4f30', '\u74dc', '\u4e56',
            '\u5173', '\u5149', '\u5f52', '\u4e28', '\u5459', '\u54c8',
            '\u548d', '\u4f44', '\u592f', '\u8320', '\u8bc3', '\u9ed2',
            '\u62eb', '\u4ea8', '\u5677', '\u53ff', '\u9f41', '\u4e6f',
            '\u82b1', '\u6000', '\u72bf', '\u5ddf', '\u7070', '\u660f',
            '\u5419', '\u4e0c', '\u52a0', '\u620b', '\u6c5f', '\u827d',
            '\u9636', '\u5dfe', '\u5755', '\u5182', '\u4e29', '\u51e5',
            '\u59e2', '\u5658', '\u519b', '\u5494', '\u5f00', '\u520a',
            '\u5ffc', '\u5c3b', '\u533c', '\u808e', '\u52a5', '\u7a7a',
            '\u62a0', '\u625d', '\u5938', '\u84af', '\u5bbd', '\u5321',
            '\u4e8f', '\u5764', '\u6269', '\u5783', '\u6765', '\u5170',
            '\u5577', '\u635e', '\u808b', '\u52d2', '\u5d1a', '\u5215',
            '\u4fe9', '\u5941', '\u826f', '\u64a9', '\u5217', '\u62ce',
            '\u5222', '\u6e9c', '\u56d6', '\u9f99', '\u779c', '\u565c',
            '\u5a08', '\u7567', '\u62a1', '\u7f57', '\u5463', '\u5988',
            '\u57cb', '\u5ada', '\u7264', '\u732b', '\u4e48', '\u5445',
            '\u95e8', '\u753f', '\u54aa', '\u5b80', '\u55b5', '\u4e5c',
            '\u6c11', '\u540d', '\u8c2c', '\u6478', '\u54de', '\u6bea',
            '\u55ef', '\u62cf', '\u8149', '\u56e1', '\u56d4', '\u5b6c',
            '\u7592', '\u5a1e', '\u6041', '\u80fd', '\u59ae', '\u62c8',
            '\u5b22', '\u9e1f', '\u634f', '\u56dc', '\u5b81', '\u599e',
            '\u519c', '\u7fba', '\u5974', '\u597b', '\u759f', '\u9ec1',
            '\u90cd', '\u5594', '\u8bb4', '\u5991', '\u62cd', '\u7705',
            '\u4e53', '\u629b', '\u5478', '\u55b7', '\u5309', '\u4e15',
            '\u56e8', '\u527d', '\u6c15', '\u59d8', '\u4e52', '\u948b',
            '\u5256', '\u4ec6', '\u4e03', '\u6390', '\u5343', '\u545b',
            '\u6084', '\u767f', '\u4eb2', '\u72c5', '\u828e', '\u4e18',
            '\u533a', '\u5cd1', '\u7f3a', '\u590b', '\u5465', '\u7a63',
            '\u5a06', '\u60f9', '\u4eba', '\u6254', '\u65e5', '\u8338',
            '\u53b9', '\u909a', '\u633c', '\u5827', '\u5a51', '\u77a4',
            '\u637c', '\u4ee8', '\u6be2', '\u4e09', '\u6852', '\u63bb',
            '\u95aa', '\u68ee', '\u50e7', '\u6740', '\u7b5b', '\u5c71',
            '\u4f24', '\u5f30', '\u5962', '\u7533', '\u8398', '\u6552',
            '\u5347', '\u5c38', '\u53ce', '\u4e66', '\u5237', '\u8870',
            '\u95e9', '\u53cc', '\u8c01', '\u542e', '\u8bf4', '\u53b6',
            '\u5fea', '\u635c', '\u82cf', '\u72fb', '\u590a', '\u5b59',
            '\u5506', '\u4ed6', '\u56fc', '\u574d', '\u6c64', '\u5932',
            '\u5fd1', '\u71a5', '\u5254', '\u5929', '\u65eb', '\u5e16',
            '\u5385', '\u56f2', '\u5077', '\u51f8', '\u6e4d', '\u63a8',
            '\u541e', '\u4e47', '\u7a75', '\u6b6a', '\u5f2f', '\u5c23',
            '\u5371', '\u6637', '\u7fc1', '\u631d', '\u4e4c', '\u5915',
            '\u8672', '\u4eda', '\u4e61', '\u7071', '\u4e9b', '\u5fc3',
            '\u661f', '\u51f6', '\u4f11', '\u5401', '\u5405', '\u524a',
            '\u5743', '\u4e2b', '\u6079', '\u592e', '\u5e7a', '\u503b',
            '\u4e00', '\u56d9', '\u5e94', '\u54df', '\u4f63', '\u4f18',
            '\u625c', '\u56e6', '\u66f0', '\u6655', '\u7b60', '\u7b7c',
            '\u5e00', '\u707d', '\u5142', '\u5328', '\u50ae', '\u5219',
            '\u8d3c', '\u600e', '\u5897', '\u624e', '\u635a', '\u6cbe',
            '\u5f20', '\u957f', '\u9577', '\u4f4b', '\u8707', '\u8d1e',
            '\u4e89', '\u4e4b', '\u5cd9', '\u5ea2', '\u4e2d', '\u5dde',
            '\u6731', '\u6293', '\u62fd', '\u4e13', '\u5986', '\u96b9',
            '\u5b92', '\u5353', '\u4e72', '\u5b97', '\u90b9', '\u79df',
            '\u94bb', '\u539c', '\u5c0a', '\u6628', '\u5159', '\u9fc3',
            '\u9fc4', };
    
    /**
     * Pinyin array.
     *
     * Each pinyin is corresponding to unihans of same offset in the unihans
     * array.
     */
    public static final byte[][] PINYINS = { { 65, 0, 0, 0, 0, 0 },
            { 65, 73, 0, 0, 0, 0 }, { 65, 78, 0, 0, 0, 0 },
            { 65, 78, 71, 0, 0, 0 }, { 65, 79, 0, 0, 0, 0 },
            { 66, 65, 0, 0, 0, 0 }, { 66, 65, 73, 0, 0, 0 },
            { 66, 65, 78, 0, 0, 0 }, { 66, 65, 78, 71, 0, 0 },
            { 66, 65, 79, 0, 0, 0 }, { 66, 69, 73, 0, 0, 0 },
            { 66, 69, 78, 0, 0, 0 }, { 66, 69, 78, 71, 0, 0 },
            { 66, 73, 0, 0, 0, 0 }, { 66, 73, 65, 78, 0, 0 },
            { 66, 73, 65, 79, 0, 0 }, { 66, 73, 69, 0, 0, 0 },
            { 66, 73, 78, 0, 0, 0 }, { 66, 73, 78, 71, 0, 0 },
            { 66, 79, 0, 0, 0, 0 }, { 66, 85, 0, 0, 0, 0 },
            { 67, 65, 0, 0, 0, 0 }, { 67, 65, 73, 0, 0, 0 },
            { 67, 65, 78, 0, 0, 0 }, { 67, 65, 78, 71, 0, 0 },
            { 67, 65, 79, 0, 0, 0 }, { 67, 69, 0, 0, 0, 0 },
            { 67, 69, 78, 0, 0, 0 }, { 67, 69, 78, 71, 0, 0 },
            { 90, 69, 78, 71, 0, 0 }, { 67, 69, 78, 71, 0, 0 },
            { 67, 72, 65, 0, 0, 0 }, { 67, 72, 65, 73, 0, 0 },
            { 67, 72, 65, 78, 0, 0 }, { 67, 72, 65, 78, 71, 0 },
            { 67, 72, 65, 79, 0, 0 }, { 67, 72, 69, 0, 0, 0 },
            { 67, 72, 69, 78, 0, 0 }, { 83, 72, 69, 78, 0, 0 },
            { 67, 72, 69, 78, 0, 0 }, { 67, 72, 69, 78, 71, 0 },
            { 67, 72, 73, 0, 0, 0 }, { 67, 72, 79, 78, 71, 0 },
            { 67, 72, 79, 85, 0, 0 }, { 67, 72, 85, 0, 0, 0 },
            { 67, 72, 85, 65, 0, 0 }, { 67, 72, 85, 65, 73, 0 },
            { 67, 72, 85, 65, 78, 0 }, { 67, 72, 85, 65, 78, 71 },
            { 67, 72, 85, 73, 0, 0 }, { 67, 72, 85, 78, 0, 0 },
            { 67, 72, 85, 79, 0, 0 }, { 67, 73, 0, 0, 0, 0 },
            { 67, 79, 78, 71, 0, 0 }, { 67, 79, 85, 0, 0, 0 },
            { 67, 85, 0, 0, 0, 0 }, { 67, 85, 65, 78, 0, 0 },
            { 67, 85, 73, 0, 0, 0 }, { 67, 85, 78, 0, 0, 0 },
            { 67, 85, 79, 0, 0, 0 }, { 68, 65, 0, 0, 0, 0 },
            { 68, 65, 73, 0, 0, 0 }, { 68, 65, 78, 0, 0, 0 },
            { 68, 65, 78, 71, 0, 0 }, { 68, 65, 79, 0, 0, 0 },
            { 68, 69, 0, 0, 0, 0 }, { 68, 69, 78, 0, 0, 0 },
            { 68, 69, 78, 71, 0, 0 }, { 68, 73, 0, 0, 0, 0 },
            { 68, 73, 65, 0, 0, 0 }, { 68, 73, 65, 78, 0, 0 },
            { 68, 73, 65, 79, 0, 0 }, { 68, 73, 69, 0, 0, 0 },
            { 68, 73, 78, 71, 0, 0 }, { 68, 73, 85, 0, 0, 0 },
            { 68, 79, 78, 71, 0, 0 }, { 68, 79, 85, 0, 0, 0 },
            { 68, 85, 0, 0, 0, 0 }, { 68, 85, 65, 78, 0, 0 },
            { 68, 85, 73, 0, 0, 0 }, { 68, 85, 78, 0, 0, 0 },
            { 68, 85, 79, 0, 0, 0 }, { 69, 0, 0, 0, 0, 0 },
            { 69, 73, 0, 0, 0, 0 }, { 69, 78, 0, 0, 0, 0 },
            { 69, 78, 71, 0, 0, 0 }, { 69, 82, 0, 0, 0, 0 },
            { 70, 65, 0, 0, 0, 0 }, { 70, 65, 78, 0, 0, 0 },
            { 70, 65, 78, 71, 0, 0 }, { 70, 69, 73, 0, 0, 0 },
            { 70, 69, 78, 0, 0, 0 }, { 70, 69, 78, 71, 0, 0 },
            { 70, 73, 65, 79, 0, 0 }, { 70, 79, 0, 0, 0, 0 },
            { 70, 79, 85, 0, 0, 0 }, { 70, 85, 0, 0, 0, 0 },
            { 71, 65, 0, 0, 0, 0 }, { 71, 65, 73, 0, 0, 0 },
            { 71, 65, 78, 0, 0, 0 }, { 71, 65, 78, 71, 0, 0 },
            { 71, 65, 79, 0, 0, 0 }, { 71, 69, 0, 0, 0, 0 },
            { 71, 69, 73, 0, 0, 0 }, { 71, 69, 78, 0, 0, 0 },
            { 71, 69, 78, 71, 0, 0 }, { 71, 79, 78, 71, 0, 0 },
            { 71, 79, 85, 0, 0, 0 }, { 71, 85, 0, 0, 0, 0 },
            { 71, 85, 65, 0, 0, 0 }, { 71, 85, 65, 73, 0, 0 },
            { 71, 85, 65, 78, 0, 0 }, { 71, 85, 65, 78, 71, 0 },
            { 71, 85, 73, 0, 0, 0 }, { 71, 85, 78, 0, 0, 0 },
            { 71, 85, 79, 0, 0, 0 }, { 72, 65, 0, 0, 0, 0 },
            { 72, 65, 73, 0, 0, 0 }, { 72, 65, 78, 0, 0, 0 },
            { 72, 65, 78, 71, 0, 0 }, { 72, 65, 79, 0, 0, 0 },
            { 72, 69, 0, 0, 0, 0 }, { 72, 69, 73, 0, 0, 0 },
            { 72, 69, 78, 0, 0, 0 }, { 72, 69, 78, 71, 0, 0 },
            { 72, 77, 0, 0, 0, 0 }, { 72, 79, 78, 71, 0, 0 },
            { 72, 79, 85, 0, 0, 0 }, { 72, 85, 0, 0, 0, 0 },
            { 72, 85, 65, 0, 0, 0 }, { 72, 85, 65, 73, 0, 0 },
            { 72, 85, 65, 78, 0, 0 }, { 72, 85, 65, 78, 71, 0 },
            { 72, 85, 73, 0, 0, 0 }, { 72, 85, 78, 0, 0, 0 },
            { 72, 85, 79, 0, 0, 0 }, { 74, 73, 0, 0, 0, 0 },
            { 74, 73, 65, 0, 0, 0 }, { 74, 73, 65, 78, 0, 0 },
            { 74, 73, 65, 78, 71, 0 }, { 74, 73, 65, 79, 0, 0 },
            { 74, 73, 69, 0, 0, 0 }, { 74, 73, 78, 0, 0, 0 },
            { 74, 73, 78, 71, 0, 0 }, { 74, 73, 79, 78, 71, 0 },
            { 74, 73, 85, 0, 0, 0 }, { 74, 85, 0, 0, 0, 0 },
            { 74, 85, 65, 78, 0, 0 }, { 74, 85, 69, 0, 0, 0 },
            { 74, 85, 78, 0, 0, 0 }, { 75, 65, 0, 0, 0, 0 },
            { 75, 65, 73, 0, 0, 0 }, { 75, 65, 78, 0, 0, 0 },
            { 75, 65, 78, 71, 0, 0 }, { 75, 65, 79, 0, 0, 0 },
            { 75, 69, 0, 0, 0, 0 }, { 75, 69, 78, 0, 0, 0 },
            { 75, 69, 78, 71, 0, 0 }, { 75, 79, 78, 71, 0, 0 },
            { 75, 79, 85, 0, 0, 0 }, { 75, 85, 0, 0, 0, 0 },
            { 75, 85, 65, 0, 0, 0 }, { 75, 85, 65, 73, 0, 0 },
            { 75, 85, 65, 78, 0, 0 }, { 75, 85, 65, 78, 71, 0 },
            { 75, 85, 73, 0, 0, 0 }, { 75, 85, 78, 0, 0, 0 },
            { 75, 85, 79, 0, 0, 0 }, { 76, 65, 0, 0, 0, 0 },
            { 76, 65, 73, 0, 0, 0 }, { 76, 65, 78, 0, 0, 0 },
            { 76, 65, 78, 71, 0, 0 }, { 76, 65, 79, 0, 0, 0 },
            { 76, 69, 0, 0, 0, 0 }, { 76, 69, 73, 0, 0, 0 },
            { 76, 69, 78, 71, 0, 0 }, { 76, 73, 0, 0, 0, 0 },
            { 76, 73, 65, 0, 0, 0 }, { 76, 73, 65, 78, 0, 0 },
            { 76, 73, 65, 78, 71, 0 }, { 76, 73, 65, 79, 0, 0 },
            { 76, 73, 69, 0, 0, 0 }, { 76, 73, 78, 0, 0, 0 },
            { 76, 73, 78, 71, 0, 0 }, { 76, 73, 85, 0, 0, 0 },
            { 76, 79, 0, 0, 0, 0 }, { 76, 79, 78, 71, 0, 0 },
            { 76, 79, 85, 0, 0, 0 }, { 76, 85, 0, 0, 0, 0 },
            { 76, 85, 65, 78, 0, 0 }, { 76, 85, 69, 0, 0, 0 },
            { 76, 85, 78, 0, 0, 0 }, { 76, 85, 79, 0, 0, 0 },
            { 77, 0, 0, 0, 0, 0 }, { 77, 65, 0, 0, 0, 0 },
            { 77, 65, 73, 0, 0, 0 }, { 77, 65, 78, 0, 0, 0 },
            { 77, 65, 78, 71, 0, 0 }, { 77, 65, 79, 0, 0, 0 },
            { 77, 69, 0, 0, 0, 0 }, { 77, 69, 73, 0, 0, 0 },
            { 77, 69, 78, 0, 0, 0 }, { 77, 69, 78, 71, 0, 0 },
            { 77, 73, 0, 0, 0, 0 }, { 77, 73, 65, 78, 0, 0 },
            { 77, 73, 65, 79, 0, 0 }, { 77, 73, 69, 0, 0, 0 },
            { 77, 73, 78, 0, 0, 0 }, { 77, 73, 78, 71, 0, 0 },
            { 77, 73, 85, 0, 0, 0 }, { 77, 79, 0, 0, 0, 0 },
            { 77, 79, 85, 0, 0, 0 }, { 77, 85, 0, 0, 0, 0 },
            { 78, 0, 0, 0, 0, 0 }, { 78, 65, 0, 0, 0, 0 },
            { 78, 65, 73, 0, 0, 0 }, { 78, 65, 78, 0, 0, 0 },
            { 78, 65, 78, 71, 0, 0 }, { 78, 65, 79, 0, 0, 0 },
            { 78, 69, 0, 0, 0, 0 }, { 78, 69, 73, 0, 0, 0 },
            { 78, 69, 78, 0, 0, 0 }, { 78, 69, 78, 71, 0, 0 },
            { 78, 73, 0, 0, 0, 0 }, { 78, 73, 65, 78, 0, 0 },
            { 78, 73, 65, 78, 71, 0 }, { 78, 73, 65, 79, 0, 0 },
            { 78, 73, 69, 0, 0, 0 }, { 78, 73, 78, 0, 0, 0 },
            { 78, 73, 78, 71, 0, 0 }, { 78, 73, 85, 0, 0, 0 },
            { 78, 79, 78, 71, 0, 0 }, { 78, 79, 85, 0, 0, 0 },
            { 78, 85, 0, 0, 0, 0 }, { 78, 85, 65, 78, 0, 0 },
            { 78, 85, 69, 0, 0, 0 }, { 78, 85, 78, 0, 0, 0 },
            { 78, 85, 79, 0, 0, 0 }, { 79, 0, 0, 0, 0, 0 },
            { 79, 85, 0, 0, 0, 0 }, { 80, 65, 0, 0, 0, 0 },
            { 80, 65, 73, 0, 0, 0 }, { 80, 65, 78, 0, 0, 0 },
            { 80, 65, 78, 71, 0, 0 }, { 80, 65, 79, 0, 0, 0 },
            { 80, 69, 73, 0, 0, 0 }, { 80, 69, 78, 0, 0, 0 },
            { 80, 69, 78, 71, 0, 0 }, { 80, 73, 0, 0, 0, 0 },
            { 80, 73, 65, 78, 0, 0 }, { 80, 73, 65, 79, 0, 0 },
            { 80, 73, 69, 0, 0, 0 }, { 80, 73, 78, 0, 0, 0 },
            { 80, 73, 78, 71, 0, 0 }, { 80, 79, 0, 0, 0, 0 },
            { 80, 79, 85, 0, 0, 0 }, { 80, 85, 0, 0, 0, 0 },
            { 81, 73, 0, 0, 0, 0 }, { 81, 73, 65, 0, 0, 0 },
            { 81, 73, 65, 78, 0, 0 }, { 81, 73, 65, 78, 71, 0 },
            { 81, 73, 65, 79, 0, 0 }, { 81, 73, 69, 0, 0, 0 },
            { 81, 73, 78, 0, 0, 0 }, { 81, 73, 78, 71, 0, 0 },
            { 81, 73, 79, 78, 71, 0 }, { 81, 73, 85, 0, 0, 0 },
            { 81, 85, 0, 0, 0, 0 }, { 81, 85, 65, 78, 0, 0 },
            { 81, 85, 69, 0, 0, 0 }, { 81, 85, 78, 0, 0, 0 },
            { 82, 65, 78, 0, 0, 0 }, { 82, 65, 78, 71, 0, 0 },
            { 82, 65, 79, 0, 0, 0 }, { 82, 69, 0, 0, 0, 0 },
            { 82, 69, 78, 0, 0, 0 }, { 82, 69, 78, 71, 0, 0 },
            { 82, 73, 0, 0, 0, 0 }, { 82, 79, 78, 71, 0, 0 },
            { 82, 79, 85, 0, 0, 0 }, { 82, 85, 0, 0, 0, 0 },
            { 82, 85, 65, 0, 0, 0 }, { 82, 85, 65, 78, 0, 0 },
            { 82, 85, 73, 0, 0, 0 }, { 82, 85, 78, 0, 0, 0 },
            { 82, 85, 79, 0, 0, 0 }, { 83, 65, 0, 0, 0, 0 },
            { 83, 65, 73, 0, 0, 0 }, { 83, 65, 78, 0, 0, 0 },
            { 83, 65, 78, 71, 0, 0 }, { 83, 65, 79, 0, 0, 0 },
            { 83, 69, 0, 0, 0, 0 }, { 83, 69, 78, 0, 0, 0 },
            { 83, 69, 78, 71, 0, 0 }, { 83, 72, 65, 0, 0, 0 },
            { 83, 72, 65, 73, 0, 0 }, { 83, 72, 65, 78, 0, 0 },
            { 83, 72, 65, 78, 71, 0 }, { 83, 72, 65, 79, 0, 0 },
            { 83, 72, 69, 0, 0, 0 }, { 83, 72, 69, 78, 0, 0 },
            { 88, 73, 78, 0, 0, 0 }, { 83, 72, 69, 78, 0, 0 },
            { 83, 72, 69, 78, 71, 0 }, { 83, 72, 73, 0, 0, 0 },
            { 83, 72, 79, 85, 0, 0 }, { 83, 72, 85, 0, 0, 0 },
            { 83, 72, 85, 65, 0, 0 }, { 83, 72, 85, 65, 73, 0 },
            { 83, 72, 85, 65, 78, 0 }, { 83, 72, 85, 65, 78, 71 },
            { 83, 72, 85, 73, 0, 0 }, { 83, 72, 85, 78, 0, 0 },
            { 83, 72, 85, 79, 0, 0 }, { 83, 73, 0, 0, 0, 0 },
            { 83, 79, 78, 71, 0, 0 }, { 83, 79, 85, 0, 0, 0 },
            { 83, 85, 0, 0, 0, 0 }, { 83, 85, 65, 78, 0, 0 },
            { 83, 85, 73, 0, 0, 0 }, { 83, 85, 78, 0, 0, 0 },
            { 83, 85, 79, 0, 0, 0 }, { 84, 65, 0, 0, 0, 0 },
            { 84, 65, 73, 0, 0, 0 }, { 84, 65, 78, 0, 0, 0 },
            { 84, 65, 78, 71, 0, 0 }, { 84, 65, 79, 0, 0, 0 },
            { 84, 69, 0, 0, 0, 0 }, { 84, 69, 78, 71, 0, 0 },
            { 84, 73, 0, 0, 0, 0 }, { 84, 73, 65, 78, 0, 0 },
            { 84, 73, 65, 79, 0, 0 }, { 84, 73, 69, 0, 0, 0 },
            { 84, 73, 78, 71, 0, 0 }, { 84, 79, 78, 71, 0, 0 },
            { 84, 79, 85, 0, 0, 0 }, { 84, 85, 0, 0, 0, 0 },
            { 84, 85, 65, 78, 0, 0 }, { 84, 85, 73, 0, 0, 0 },
            { 84, 85, 78, 0, 0, 0 }, { 84, 85, 79, 0, 0, 0 },
            { 87, 65, 0, 0, 0, 0 }, { 87, 65, 73, 0, 0, 0 },
            { 87, 65, 78, 0, 0, 0 }, { 87, 65, 78, 71, 0, 0 },
            { 87, 69, 73, 0, 0, 0 }, { 87, 69, 78, 0, 0, 0 },
            { 87, 69, 78, 71, 0, 0 }, { 87, 79, 0, 0, 0, 0 },
            { 87, 85, 0, 0, 0, 0 }, { 88, 73, 0, 0, 0, 0 },
            { 88, 73, 65, 0, 0, 0 }, { 88, 73, 65, 78, 0, 0 },
            { 88, 73, 65, 78, 71, 0 }, { 88, 73, 65, 79, 0, 0 },
            { 88, 73, 69, 0, 0, 0 }, { 88, 73, 78, 0, 0, 0 },
            { 88, 73, 78, 71, 0, 0 }, { 88, 73, 79, 78, 71, 0 },
            { 88, 73, 85, 0, 0, 0 }, { 88, 85, 0, 0, 0, 0 },
            { 88, 85, 65, 78, 0, 0 }, { 88, 85, 69, 0, 0, 0 },
            { 88, 85, 78, 0, 0, 0 }, { 89, 65, 0, 0, 0, 0 },
            { 89, 65, 78, 0, 0, 0 }, { 89, 65, 78, 71, 0, 0 },
            { 89, 65, 79, 0, 0, 0 }, { 89, 69, 0, 0, 0, 0 },
            { 89, 73, 0, 0, 0, 0 }, { 89, 73, 78, 0, 0, 0 },
            { 89, 73, 78, 71, 0, 0 }, { 89, 79, 0, 0, 0, 0 },
            { 89, 79, 78, 71, 0, 0 }, { 89, 79, 85, 0, 0, 0 },
            { 89, 85, 0, 0, 0, 0 }, { 89, 85, 65, 78, 0, 0 },
            { 89, 85, 69, 0, 0, 0 }, { 89, 85, 78, 0, 0, 0 },
            { 74, 85, 78, 0, 0, 0 }, { 89, 85, 78, 0, 0, 0 },
            { 90, 65, 0, 0, 0, 0 }, { 90, 65, 73, 0, 0, 0 },
            { 90, 65, 78, 0, 0, 0 }, { 90, 65, 78, 71, 0, 0 },
            { 90, 65, 79, 0, 0, 0 }, { 90, 69, 0, 0, 0, 0 },
            { 90, 69, 73, 0, 0, 0 }, { 90, 69, 78, 0, 0, 0 },
            { 90, 69, 78, 71, 0, 0 }, { 90, 72, 65, 0, 0, 0 },
            { 90, 72, 65, 73, 0, 0 }, { 90, 72, 65, 78, 0, 0 },
            { 90, 72, 65, 78, 71, 0 }, { 67, 72, 65, 78, 71, 0 },
            { 90, 72, 65, 78, 71, 0 }, { 90, 72, 65, 79, 0, 0 },
            { 90, 72, 69, 0, 0, 0 }, { 90, 72, 69, 78, 0, 0 },
            { 90, 72, 69, 78, 71, 0 }, { 90, 72, 73, 0, 0, 0 },
            { 83, 72, 73, 0, 0, 0 }, { 90, 72, 73, 0, 0, 0 },
            { 90, 72, 79, 78, 71, 0 }, { 90, 72, 79, 85, 0, 0 },
            { 90, 72, 85, 0, 0, 0 }, { 90, 72, 85, 65, 0, 0 },
            { 90, 72, 85, 65, 73, 0 }, { 90, 72, 85, 65, 78, 0 },
            { 90, 72, 85, 65, 78, 71 }, { 90, 72, 85, 73, 0, 0 },
            { 90, 72, 85, 78, 0, 0 }, { 90, 72, 85, 79, 0, 0 },
            { 90, 73, 0, 0, 0, 0 }, { 90, 79, 78, 71, 0, 0 },
            { 90, 79, 85, 0, 0, 0 }, { 90, 85, 0, 0, 0, 0 },
            { 90, 85, 65, 78, 0, 0 }, { 90, 85, 73, 0, 0, 0 },
            { 90, 85, 78, 0, 0, 0 }, { 90, 85, 79, 0, 0, 0 },
            { 0, 0, 0, 0, 0, 0 }, { 83, 72, 65, 78, 0, 0 },
            { 0, 0, 0, 0, 0, 0 }, };
    
    /**
     * 姓氏的多音字处理
     */
    public static Map<String, Character> specialHanzi = new HashMap<>();
    
    static {
    
        specialHanzi.put("8d3e", '\u7532'); // 贾--甲
    
        specialHanzi.put("5355", '\u5584'); // 单--善
    
        specialHanzi.put("6c88", '\u6df1'); // 沈--深
    
        specialHanzi.put("4ec7", '\u6c42'); // 仇--求
    
        specialHanzi.put("89e3", '\u8c22'); // 解--谢
    
        specialHanzi.put("7fdf", '\u5b85'); // 翟--宅
    
        specialHanzi.put("67e5", '\u4e4d'); // 查--乍
    
        specialHanzi.put("66fe", '\u589e'); // 曾--增
    
        specialHanzi.put("665f", '\u6210'); // 晟--成
    
        specialHanzi.put("4e50", '\u6708'); // 乐--月
    
        specialHanzi.put("533a", '\u6b27'); // 区--欧
    
        specialHanzi.put("51af", '\u9022'); // 冯--逢
    
        specialHanzi.put("7e41", '\u5a46'); // 繁--婆
    
        specialHanzi.put("957f", '\u8d26'); // 长--帐
    
        specialHanzi.put("77f3", '\u65f6'); // 石--时
    
        specialHanzi.put("67cf", '\u6446'); // 柏--摆
    
        specialHanzi.put("6734", '\u666e'); // 朴--普
    
        specialHanzi.put("7f2a", '\u79d2'); // 缪--秒
    
    }
    
    /**
     * First and last Chinese character with known Pinyin according to zh
     * collation
     */
    private static final String FIRST_PINYIN_UNIHAN = "\u963F";
    private static final String LAST_PINYIN_UNIHAN = "\u9FFF";
    
    private static final Collator COLLATOR = Collator.getInstance(Locale.CHINA);
    
    private static HanziNameToPinyin sInstance;
    private final boolean mHasChinaCollator;
    
    public static class Token {
        /**
         * Separator between target string for each source char
         */
        public static final String SEPARATOR = " ";
    
        public static final int LATIN = 1;
        public static final int PINYIN = 2;
        public static final int UNKNOWN = 3;
    
        public Token() {
        }
    
        public Token(int type, String source, String target) {
            this.type = type;
            this.source = source;
            this.target = target;
        }
    
        /**
         * Type of this token, ASCII, PINYIN or UNKNOWN.
         */
        public int type;
        /**
         * Original string before translation.
         */
        public String source;
        /**
         * Translated string of source. For Han, target is corresponding Pinyin.
         * Otherwise target is original string in source.
         */
        public String target;
    }
    
    protected HanziNameToPinyin(boolean hasChinaCollator) {
        mHasChinaCollator = hasChinaCollator;
    }
    
    public static HanziNameToPinyin getInstance() {
        synchronized (HanziNameToPinyin.class) {
            if (sInstance != null) {
                return sInstance;
            }
            // Check if zh_CN collation data is available
            final Locale locale[] = Collator.getAvailableLocales();
    
            // 增加的代码,增强。
            final Locale chinaAddition = new Locale("zh");
    
            for (int i = 0; i < locale.length; i++) {
                if (locale[i].equals(Locale.CHINA)
                        || locale[i].equals(chinaAddition)) {
                    // Do self validation just once.
                    if (DEBUG) {
                        Log.d(TAG, "Self validation. Result: "
                                + doSelfValidation());
                    }
                    sInstance = new HanziNameToPinyin(true);
                    return sInstance;
                }
            }
            Log.w(TAG,
                    "There is no Chinese collator, HanziToPinyin is disabled");
            sInstance = new HanziNameToPinyin(false);
            return sInstance;
        }
    }
    
    /**
     * Validate if our internal table has some wrong value.
     *
     * @return true when the table looks correct.
     */
    private static boolean doSelfValidation() {
        char lastChar = UNIHANS[0];
        String lastString = Character.toString(lastChar);
        for (char c : UNIHANS) {
            if (lastChar == c) {
                continue;
            }
            final String curString = Character.toString(c);
            int cmp = COLLATOR.compare(lastString, curString);
            if (cmp >= 0) {
                Log.e(TAG, "Internal error in Unihan table. "
                        + "The last string \"" + lastString
                        + "\" is greater than current string \"" + curString
                        + "\".");
                return false;
            }
            lastString = curString;
        }
        return true;
    }
    
    private Token getToken(char character) {
        Token token = new Token();
        final String letter = Character.toString(character);
        token.source = letter;
        int offset = -1;
        int cmp;
        if (character < 256) {
            token.type = Token.LATIN;
            token.target = letter;
            return token;
        } else {
            cmp = COLLATOR.compare(letter, FIRST_PINYIN_UNIHAN);
            if (cmp < 0) {
                token.type = Token.UNKNOWN;
                token.target = letter;
                return token;
            } else if (cmp == 0) {
                token.type = Token.PINYIN;
                offset = 0;
            } else {
                cmp = COLLATOR.compare(letter, LAST_PINYIN_UNIHAN);
                if (cmp > 0) {
                    token.type = Token.UNKNOWN;
                    token.target = letter;
                    return token;
                } else if (cmp == 0) {
                    token.type = Token.PINYIN;
                    offset = UNIHANS.length - 1;
                }
            }
        }
    
        token.type = Token.PINYIN;
        if (offset < 0) {
            int begin = 0;
            int end = UNIHANS.length - 1;
            while (begin <= end) {
                offset = (begin + end) / 2;
                final String unihan = Character.toString(UNIHANS[offset]);
                cmp = COLLATOR.compare(letter, unihan);
                if (cmp == 0) {
                    break;
                } else if (cmp > 0) {
                    begin = offset + 1;
                } else {
                    end = offset - 1;
                }
            }
        }
        if (cmp < 0) {
            offset--;
        }
        StringBuilder pinyin = new StringBuilder();
        for (int j = 0; j < PINYINS[offset].length && PINYINS[offset][j] != 0; j++) {
            pinyin.append((char) PINYINS[offset][j]);
        }
        token.target = pinyin.toString();
        if (TextUtils.isEmpty(token.target)) {
            token.type = Token.UNKNOWN;
            token.target = token.source;
        }
        return token;
    }
    
    /**
     * Convert the input to a array of tokens. The sequence of ASCII or Unknown
     * characters without space will be put into a Token, One Hanzi character
     * which has pinyin will be treated as a Token. If these is no China
     * collator, the empty token array is returned.
     */
    public ArrayList<Token> get(final String input) {
        ArrayList<Token> tokens = new ArrayList<Token>();
        if (!mHasChinaCollator || TextUtils.isEmpty(input)) {
            // return empty tokens.
            return tokens;
        }
        final int inputLength = input.length();
        final StringBuilder sb = new StringBuilder();
        int tokenType = Token.LATIN;
        // Go through the input, create a new token when
        // a. Token type changed
        // b. Get the Pinyin of current charater.
        // c. current character is space.
        for (int i = 0; i < inputLength; i++) {
            char character = input.charAt(i);
            if (character == ' ') {
                if (sb.length() > 0) {
                    addToken(sb, tokens, tokenType);
                }
            } else if (character < 256) {
                if (tokenType != Token.LATIN && sb.length() > 0) {
                    addToken(sb, tokens, tokenType);
                }
                tokenType = Token.LATIN;
                sb.append(character);
            } else {
                if (i == 0) {
                    // 如果是名字的第一个字就进行多音字姓氏判断,也就这句代码关键
                    if (specialHanzi.get(Integer.toHexString(character)) != null) {
                        character = specialHanzi.get(Integer.toHexString(character));
                    }
                }
                Token t = getToken(character);
                if (t.type == Token.PINYIN) {
                    if (sb.length() > 0) {
                        addToken(sb, tokens, tokenType);
                    }
                    tokens.add(t);
                    tokenType = Token.PINYIN;
                } else {
                    if (tokenType != t.type && sb.length() > 0) {
                        addToken(sb, tokens, tokenType);
                    }
                    tokenType = t.type;
                    sb.append(character);
                }
            }
        }
        if (sb.length() > 0) {
            addToken(sb, tokens, tokenType);
        }
        return tokens;
    }
    
    private void addToken(final StringBuilder sb,
                          final ArrayList<Token> tokens, final int tokenType) {
        String str = sb.toString();
        tokens.add(new Token(tokenType, str, str));
        sb.setLength(0);
    }
    
    /**
     *  输入汉字返回拼音
     */
    public static String getPinYin(String hanzi) {
        ArrayList<Token> tokens = HanziNameToPinyin.getInstance().get(hanzi);
        StringBuilder sb = new StringBuilder();
        if (tokens != null && tokens.size() > 0) {
            for (Token token : tokens) {
                if (Token.PINYIN == token.type) {
                    sb.append(token.target);
                } else {
                    sb.append(token.source);
                }
            }
        }
        return sb.toString();
    }
    

    }

    展开全文
  • 本文首先介绍了语音合成的国内外发展现状,接着简述了语音合成过程的基本原理。并对合成过程中的核心问题之一——...对于语音合成技术中的多音字消歧问题,先介绍了传统消歧方法,并在此基础上引出了最大熵模型消歧法。
  • 部编语文 低年级字词近义词反义词多音字句子每日一练 月 日 家长签字 一组词 孔 桥 群 队 旗 二近义词 灾害 温和 暴躁 办法 如果 环绕 三反义词 宽敞 困难 热闹 空闲 打开 流动 四多音字
  • 根据汉字获取汉语拼音的首字母,支持多音字 可以自己维护多音字词汇集 使用中有问题可以私信我解决
  • C#取汉字拼音首字母DEMO,支持多音字,已对FELang.GetJMorphResult函数以及MORRSLT进行修正,WIN10+VS2015亲测正常使用。
  • Java汉字转拼音(支持多音字
  • 语音朗读技术日益普及但多音字问题始终没有得到解决,虽然采用词组可以减少一些多音字识别的困难,但不能从根本上解决问题。在朗读中出现将字音读错实在使人不爽。所以大家都来集思广益,想出切实可行的解决方法,让...

      语音朗读技术日益普及但多音字问题始终没有得到解决,虽然采用词组可以减少一些多音字识别的困难,但不能从根本上解决问题。在朗读中出现将字音读错实在使人不爽。所以大家都来集思广益,想出切实可行的解决方法,让语音技术更好的为大家服务。这里提出的解决方案,有的是不容易实现的,只能供有关者参考。

    利用现有条件实现无错误语音朗读的方法
      计算机能识别一个汉字是不是个多音字,但是不能判断语音软件对一个汉字的读音在文章中的特定位置是不是正确,这只能靠人来识别正误。发现错误读音如何处理?可以用读音正确的其它字替代读音错误的字,这样修改后的文章可以称为此文章对应于XXX语音库的朗读版,这样做牺牲了文章的可读性。所以比较好的做法是,程序在执行语音朗读时,让软件显示正确的文章,但同步读出的却是朗读版,这样就比较完美了。

    注释读音
      以往文章中有时对多音字采用在自后注释其读音,例如 银行(hang2),其中2表示读音为 2声,这样确实可以标注准确的读音,但是占地方不少,会使文章显得臃肿,并且大家在写文章时也没有标注多音字的习惯,尤其是常用字。一般文章也不需要为多音字标注其读音,只是需要朗读的文章才有这个必要,所以朗读软件先将普通文件转化加工为朗读文件再朗读,如何标示多音字的读音是个关键问题,仍然采用字后标识但方法要改进,根据统计发现一个汉字多音字读音不超过四个,现在需要汉字的多音字表。

    多音字表
      首先要建立多音字表,现在有许多多音字表,但还没有建立标准,为每一个字形的汉字,以表格方式标示其一种或多种读音,如果一个汉字有多种读音,要统计各种读音出现的频率,让频率高的出现在表的前面。此表要让计算机或人查找,所以表的设计要兼顾两者,例如要有词例。
      有了多音字表,对任何一个汉字可以标注其唯一的读音,标注方式,汉字后面跟两个字节的标注码,第一码为#是个记号,第二码是此汉字在多音字表中的排列位置,是数字 1至 4其中之一个,例如“行”字的多音字表
                      行 ①xíng 举行 发行 ②háng 行市,行伍 ③hàng 树行子 ④héng 道行

      标示读音的例子:银行#2   发行#1   树行#3子
      现在的问题需要语音系统有识别标注的能力,也就是读取标注码后到多音字表中找出对应的读音并读出来。这需要语音方面的软件开发商协助才可能完成。
      这些都办到了,就可以在注释后让软件读出正确的声音。
      问题是,每个语音朗读者的表现各不一样,所用的词量也不一致,对一样的段落可能处理方式不一样,所以标准化尤为重要,不然无法使用统一的解决办法。

    具体应用
      要想达到语音软件理想的服务,需要对文章进行预编辑;软件运行后,发现多音字,在此处读音若发现错误读音,显示此汉字全部的读音,从中选择正确的读音并做好标注,标注是在字形的点阵里,然后进行下一个,直至文章结束。
      经过标注的文章就可以朗读了,软件解释标注选择正确读音,完成文章的显示和朗读。

    无可奈何的处理方法
      就以现在的条件要想实现完美的朗读也不是不可以但是相当麻烦,还要有相应的软件。
      将所要朗读的文本再复制一份将作为朗读版,而原文作为阅读版,两者字数上、格式上完全一致,选定一个语音朗读者A,对常用多音字下手,对含多音字段落看A读的是否有误,如果发现读音错误将正确读音的字替换原字而修改朗读版,朗读版只是读音正确不能用于阅读。
      全部改好后,可以让软件朗读了,软件的作用是显示阅读版而读朗读版,从而实现了正确朗读和显示。

     

    转载于:https://www.cnblogs.com/sjdbky/archive/2011/10/29/2228331.html

    展开全文
  • 多音字消歧是普通话语音合成系统中字音转换模块的核心问题。选择了常见易错的33个多音字和24个多音词作为研究对象,构建了一个平均每个多音字(词)5 000句的语料库,并且提出了一种结合决策树和基于转换的错误驱动...
  • 其实也就是建立一个多音字词库,把预知范围的多音字写到词库里面,进行转换的时候回去多音字词库进行查找,就会得到我们需要的正确的多音字拼音。 注意事项 多音字词库,需要结合自身的业务需求来进行完善,以下实例...

    Java实现中文汉字转换拼音,解决多音字问题

    客户的需求里面有汉字转化首字母拼音,进行排序。找了大量的资料,发现多音字问题不好弄,这里做一个总结。可以彻底解决掉这个问题。
    其实也就是建立一个多音字词库,把预知范围的多音字写到词库里面,进行转换的时候回去多音字词库进行查找,就会得到我们需要的正确的多音字拼音。

    注意事项

    多音字词库,需要结合自身的业务需求来进行完善,以下实例,直接粘贴复制就可以跑

    结构图如下

    此捆绑

    词库内容

    a#阿 阿姨 阿富 阿门 阿拉 阿林  黑阿  麦阿密 鹿城阿岙 阿福  
    ao#拗口 违拗 凹  
    ai#艾 艾滋 艾蒿 未艾  
    bang#膀 翅膀 臂膀 重磅 磅秤 黄泥磅店 蛤蚌 蚌壳 河蚌 鹬蚌 珠蚌 蚌  
    ba#扒  
    bai#叔伯 百 百万  柏  
    bao#剥皮 薄 超薄 薄脆 薄板 薄饼  暴 暴晒 暴发 暴雨 暴力 风暴  暴露 暴风  汉堡 古堡 地堡 城堡 龍堡 卡斯堡  麻家堡 麦芬堡 汉堡 麦得堡  麦尔堡  曝光 瀑河  
    beng#蚌埠  
    bi#复辟  臂 臂章 螳臂 交臂 前臂 一臂 奋臂 膀臂 臂膀 秘鲁 泌阳  
    bing#屏弃 屏气 屏除 屏退 屏息  
    bian#扁 扁桃 便 方便 方便面 便当 便捷  
    bo#薄 薄荷 单薄 伯 伯仲 伯乐 伯劳 伯父 大伯 老伯 伯母 黄伯 伯爵 停泊 淡泊 尼泊 漂泊 波 鸿波 柏林  
    bu#大埔  
    can#参 参谋 参事 总参 参数 参议 参观 参拜 参股  
    cang#藏 埋藏 藏头 秘藏  雪藏 藏匿 收藏 馆藏 矿藏 隐藏  蕴藏 藏袍 储藏 窖藏 藏龙  藏胞 冷藏 珍藏 私藏 藏掖 西藏 藏书 藏品 伧俗  伧 龙藏寺  
    cen#参差  
    ceng#曾 不曾 似曾 几曾 何曾 曾经 曾几 未曾 噌  噌的 一声  
    cha#差  刹那 宝刹 一刹  喳喳  
    chai#公差 差役 专差 官差 听差 美差 办差 差事 差使 肥差 当差 钦差  
    chan#颤 颤悠  单于 禅 禅学 班禅 禅宗 禅堂 禅门 禅机 禅杖 禅房 禅师 坐禅 参禅 禅院  
    chang#长 周长 细长 长发 三长 长河 长袖 长衫 天长 长短 超长 长沙 长春 长远 长度 长江 长处 长假  长街 长征 全长 长城 波长  身长 长途 长吁 长虹 长方  厂  
    chao#朝 朝阳 朝阳区 朝鲜 朝廷 王朝 历朝 解嘲 讥嘲 自嘲 嘲笑 嘲弄 冷嘲 嘲讽 绰绰 绰起 绰家 剿袭 剿说  
    che#车 汽车 停车场 车车  黑车 车饰  
    chen#称职 匀称 称心 相称 对称  
    cheng#称 职称 简称 总称 官称 代称 称号 称谓  昵称 谦称 全称 名称  乘 噌吰 澄  
    chu#六畜 家畜 耕畜 畜生 牲畜  
    chui#椎心  
    chuan#传 文传 传媒 传销 传情 真传 祖传 传闻 传家 秘传 传单 传说  
    chi#匙子 茶匙 羹匙 汤匙 尺 尺度 英尺 咫尺 尺码 公尺 卡尺 米尺 卷尺  
    chong#重庆 重重  
    chou#臭 汗臭 臭氧 口臭 腋臭 臭虫 臭骂 臭美 酸臭 腐臭 臭气 腥臭 臭名 遗臭 恶臭 臭豆 狐臭 臭味 臭架  
    chuang#经幢  
    chuo#绰 绰约 阔绰 绰号 宽绰  
    ci#参差 伺候 龟兹  
    cuan#攒钱 攒聚 攒动   
    cuo#撮儿 撮要 撮合  
    da#大 大街 沓子 龙大 大西洋 大昌  大圣 福大 黑大 大华 大包  大厦  
    dao#叨 叨唠 絮叨 叨念 叨咕 念叨 唠叨 叨叨 磨叨  
    dai#大夫  
    dan#单 西单 东单 清单 报单 单利 名单 单姓 单亲 单线 单科 单间 单挑 单价 单词  子弹    
    de#的 似的 总的 中的 别的  
    deng#澄清  
    di#怎的 无的 有的 目的 标的 打的 的确 的当 的士 上地 大地 天地 提防 堤  
    diao#调 蓝调 蓝调吧 调调 音调 论调 格调 调令 低调 笔调 基调 强调 声调 滥调 老调 色调 单调 腔调 跑调 曲调 步调 语调 主调 情调  
    du#都 都会 国都 都城 古都 故都 大都 首都 成都 旧都 都市 龙都  鼎都 鹤都 鹏都 鸿都  麦度 度 态度 读书 法度 宽度 进度   
    dui#堆    
    dou#全都 句读  
    duo#测度 忖度 揣度 猜度 舵  
    dun#粮囤 顿  
    e#阿谀 阿胶 阿弥 恶心  
    er#儿  
    fan#番 番茄 繁  
    fo#佛 佛塔 佛徒 佛牙 佛教  
    fu#仿佛 果脯  
    fou#否 是否 与否  
    ga#咖 咖喱 伽马  
    gai#盖  
    gang#扛鼎  
    ge#革 革命  皮革  鹰革  蛤蚧 文蛤 蛤蜊 咯吱 咯噔 咯咯  
    gei#给  
    geng#脖颈  
    gong#女红  
    gu#谷 布谷 谷物 谷地 硅谷 中鹄  麦谷 麓谷 鹭谷 鼓  
    gui#龟 龟山 龟士 龟博 龟仔 鹿龟  龟汁 龟苓 龟顶  
    gua#挺括 顶呱 呱呱 呱唧 呱嗒 呱  
    guan#纶巾 东莞  
    guang#广 广州 广东 广播  
    ha#蛤蟆 癞蛤 虾蟆  
    hai#还是 还有 咳  
    hao#貉子 貉绒  
    hang#总行 分行 支行 行业 排行 行情 央行 商行 外行 银行 商行 酒行 麻行 琴行 巷道 珩  
    he#和 嘉和 和睦 亲和  龙和  之貉 威吓 恫吓 恐吓 鼎和  锦和 麒和苑 合 合资 鸿合  
    heng#道行  
    hu#鹄 鹄望 鸿鹄 鹄立  
    huan#还 鹂还  
    hui#会 会馆 会展 会所 协会 国会 会堂  
    hong#红 红装 红牌  红木 红人 虹  
    huo#软和 热和 暖和  
    ji#病革 给养 自给 给水 薪给 给予 供给 稽考 稽查 稽核 滑稽 稽留 缉获 缉查 缉私 缉捕 狼藉 奇数 亟  亟待 亟须 亟亟 亟需 诘屈 荠菜  
    jia#雪茄 伽  瑜伽 伽利略 家  
    jian#见 龙见  
    jiang#降 降温 降低 降旗 下降 倔强  
    jiao#嚼舌 嚼子 细嚼 角 平角 视角 海角 龙角 鹿角  围剿 征剿 饺 饺子 脚  
    jie#解 解放 慰藉 蕴藉 盘诘 诘难 诘问 反诘 桔  
    jin#矜 矜夸 矜持 骄矜 自矜 劲  
    jing#颈 颈项 颈椎 引颈 长颈 宫颈 瓶颈 龙颈  黑颈鹤 鹿颈  景 景色 帝景 劲松  
    ju#咀 咀嚼  居  桔汁  
    jun#均 平均 鸿均  
    juan#棚圈 圈养  
    jv#咀嚼 趑趄  
    jvan#猪圈 羊圈  
    jue#主角 角色 旦角 女角 丑角 角力 名角 配角 咀嚼 觉 直觉 感觉 错觉 触觉 幻觉 堀  
    jun#龟裂 俊  
    jvn#龟裂  
    ka#咖啡 卡 磁卡  贺卡 卡拉 胸卡 声卡 卡片  绿卡 卡通  网卡 卡口  龙卡  咯痰 咯血 喀  
    kang#扛  
    ke#咳 咳嗽 干咳 贝壳 蚌壳 外壳 蛋壳 脑壳 弹壳  
    keng#吭声 吭气 吭哧  
    kuai#会计 财会  
    kuo#括  
    la#癞痢 腊  
    lai#癞疮 癞子 癞蛤 癞皮  
    lao#积潦 络子 落枕 落价 麻粩  
    le#乐 娱乐 玩乐 乐趣  美乐 乐缘  勒  了  
    lei#勒紧  
    lo#然咯  
    lou#佝偻  
    long#里弄 弄堂 泷  
    li#礼 豊 栎  
    liao#了解 了结  明了 了得 末了 未了 了如  了如指掌 潦草 潦倒  
    liang#靓  
    liu#碌碡  碌碌 劳碌 忙碌 庸碌 六  
    lu#绿林 碌  
    luo#络 络腮 落 部落 落花 日落  
    lv#率 频率 机率 比率 效率 胜率 概率 汇率 功率 倍率 绿 绿叶 淡绿 绿色 绿豆 伛偻  绿洲  
    lun#丙纶 锦纶 经纶 涤纶  
    mai#埋  
    man#埋怨 蔓  
    mai#脉 山脉 动脉 命脉 筋脉 脉象 气脉 脉动 脉息 脉络 一脉 经脉  
    mang#氓 流氓  
    me#黛么  
    meng#群氓 盟  
    mei#没  
    mo#埋没 隐没 脉脉 模 航模 模糊 男模 楷模 规模 劳模 模型 模范 模特 名模  摩 么 麼 麽  
    mou#绸缪  
    mi#秘 秘密 秘方 奥秘 神秘 泌尿 分泌  
    miu#谬 谬论 纰缪  
    mu#人模 字模 模板 模样 模具 装模 装模做样 模子  
    na#哪 娜 安娜 娜娜 丽娜 黛尔娜 黛娜  海娜 黑娜 黄丽娜 麦香娜  优娜 麦娜 麟娜  那  
    nan#南 南方 湖南  
    ne#哪吒 呢  
    nong#弄  
    ni#毛呢 花呢 呢绒 线呢 呢料 呢子 呢喃 溺  
    niao#便溺 尿  
    nian#粘  
    niu#执拗 拗不  
    nue#疟 疟疾  
    nuo#婀娜 袅娜  
    nv#女 女人  
    nve#疟原 疟蚊  
    pa#扒  
    pai#迫击 迫击炮 派  
    pao#刨 炮  
    pang#膀胱 膀肿 磅礴  
    pi#否极 臧否 龙陂 黄陂  
    pian#扁舟 便宜  
    piao#朴姓  
    ping#屏  屏幕 荧屏 银屏  
    po#泊 迫 朴刀 坡 陂  
    pu#暴十 一曝十寒 里堡 十里堡 胸脯 肉脯 脯子 杏脯 简朴 朴质 古朴 朴厚 纯朴 朴素 诚朴 俭朴 朴实 淳朴 曝晒 瀑布 飞瀑 埔 黄埔  
    qiu#龟兹  
    qi#稽首 缉鞋 栖 奇 奇妙 传奇 亟来 荸荠 蹊跷  林栖  鹿奇 鹭奇 漆 齐 齐天大圣 齐天 其  
    qia#卡脖 卡子 关卡 卡壳 哨卡 边卡 发卡  
    qiao#雀盲 雀子 地壳 甲壳 躯壳  
    qian#纤手 拉纤 纤夫 纤绳 乾  
    qiang#强颜  强人 自强 强烈 强风 强大 黎强 麒强 鹤强 龚强  
    qie#茄子 颠茄 番茄 趔趄   
    qin#亲 亲和 亲亲 棘矜 矜锄  
    qing#干亲 亲家 黥  
    qu#区 小区  
    quan#转圈 钢圈 圆圈 罗圈 弧圈 垫圈 小圈 眼圈  
    que#雀 麻雀 鸟雀 燕雀 孔雀 云雀 雀巢、  
    re#般若  
    ruo#若  
    sai#塞 麦迪塞姆 活塞  
    se#堵塞 搪塞 茅塞 闭塞 鼻塞 梗塞 阻塞 淤塞 拥塞 哽塞 月色 彩色 特色 深色 声色 黛色  黛色 黑色瞳 色坊  
    sha#刹车 急刹 急刹车 厦  广厦 大厦 商厦 鹰大厦  莎  
    shai#色子  
    shan#姓单 单县  杉 铁杉 杉树 封禅 禅让 黒杉  栅  
    shang#裳 衣裳  
    she#拾级 折本  
    shen#沙参 野参 参王 人参 红参 丹参 山参 海参 刺参 没什 什么 为什 鹿参 身  
    sheng#野乘 千乘 史乘  省 晟 盛 盛大 鸿盛  
    shi#钥匙 拾荒 捡拾 拾物 家什 什物 什锦 麻什  麦什 喀什 牛什  识  见识 知识 似的 骨殖 食 饮食 副食  石 石业 石头 石艺 氏 姓氏 上栅 下栅  
    shuai#表率 率性 率直 率真 粗率 率领 轻率 直率 草率 大率 坦率 数字 招数 基数 数码  
    shuang#泷水  
    shu#属 金属 气数 岁数 度数 数据 级数 数控 数学 参数 次数 正数 代数 实数 系数 分数 辈数  
    shui#游说  
    shuo#数见 数见不鲜 传说 听说 妄说 实说  胡说 评说 分说 小说  
    si#窥伺 伺弄 伺机 疑似 似是 好似 似曾 形似 酷似 貌似 似懂 胜似 恰似 近似 神似 赛似 看似 活似 强似 似乎 类似 相似 思  
    su#宿主 宿命 归宿 住宿 借宿 寄宿 宿营 夜宿 露宿 投宿 宿舍 名宿 整宿 食宿  
    sui#尿泡  
    ta#拓本 拓片 碑拓 疲沓 拖沓 杂沓 沓 塔 鸿塔  
    tang#汤 鸭汤 鸡汤  
    tao#叨扰 叨光 陶 陶器  
    tan#弹性 弹力 反弹  
    ti#手提 提速 提意 提前 提早 提升 提议 提款 提婚 提包 耳提 提供 麦麦提 体  
    tiao#空调 调教 烹调 调羹 调料 调皮  调控 调节 调整 调价 谐调  协调 调色 调侃 调味 失调 调治 调频 调剂 调停 调休 调解  
    ting#町 域町 听  
    tong#垌  
    tui#褪色 褪毛  
    tuo#拓 拓宽 拓荒 开拓 落拓 拓展 拓印  
    tun#屯 囤积 囤聚  
    wei#尾 响尾 尾巴 尾灯 船尾 追尾 尾椎 月尾  燕尾 尾数 年尾 岁尾 鸢尾 凤尾 彗尾 尾翼 结尾 遗之 龙尾  齐鑫尾 麻尾 麦度 鹿尾  
    wu#可恶 交恶 好恶 厌恶 憎恶 嫌恶 痛恶 深恶  
    wan#藤蔓 枝蔓 瓜蔓 蔓儿  莞尔 万 百万 萬  
    xia#虾 虾仁 青虾 大虾 虾皮 对虾 虾子 虾酱 虾兵 虾米 龙虾 噶厦 厦门 吓唬 吓人 惊吓 天虾 龙虾 皮皮虾 麦虾  
    xi#栖栖 系 关系 星系 水系 系念 体系 联系 系列 菜系 世系  蹊 蹊径 溪 洗  
    xiao#校 学校 切削 削面 刀削 刮削  
    xian#纤细 光纤 纤巧 纤柔 纤小 纤维 纤瘦 纤纤 化纤 纤秀 棉纤 纤尘  
    xiang#巷 街巷 僻巷 巷子 龙门巷 六巷 龙湾巷 龙港巷 龙泉巷 龙巷 龙妙巷 龄巷 齐家巷 鼓楼巷 鼓巷 黎明巷 麻子巷 麻园巷 麦子巷 鹊巷  
    xie#解数 出血 采血 换血 血糊 尿血 淤血 放血 血晕 血淋 便血 吐血 咯血 叶韵 蝎 蝎子  
    xiu#铜臭 乳臭 成宿 星宿  
    xin#馨 信 鸿信  
    xing#深省 省视 内省 不省人事 省悟 省察 行 旅行 例行 行程 行乐 龙行 人行 流行 先行 行星 品行  发行 行政 风行 龙行 龍行 麟行  
    xu#牧畜 畜产 畜牧 畜养 吁 气吁 喘吁 吁吁 麦埂圩  
    xue#削 削减 削弱  削瘦 削球 削平 削价 瘦削 剥削 削职  删削 削肩  血 吸血  
    xun#荨 荨麻 荨麻疹  
    ya#芽  
    yao#发疟 疟子 约斤 称约 钥匙 金钥 耀  
    yan#吞咽 咽气 咽喉  殷红 腌 腌制 腌肉 腌菜 烟 烟草 名烟 烟酒  
    ye#抽咽 哽咽 咽炎 下咽 呜咽 幽咽 悲咽 叶 绿叶 叶子 荷叶 落叶 菜叶 红叶 树叶 枫叶  茶叶 葉 鸿葉  液   
    yi#自艾 惩艾 后尾 遗  屹  
    yin#殷 殷勤 殷墟 殷切 殷鉴  
    yo#杭育  
    yu#谷浑 呼吁 吁请 吁求 育 体育 教育 育儿 熨帖 熨烫 於  
    yuan#员  
    yun#熨 熨斗 电熨斗  
    yue#乐音 器乐 乐律 乐章 音乐 乐理 民乐 乐队 声乐 奏乐 弦乐 乐坛 管乐 配乐 乐曲 乐谱  锁钥 密钥 乐团 鼓乐社 乐器 栎阳 约 约会  
    zan#积攒  
    zang#宝藏 藏历 藏文 藏香 藏语 藏青 藏族 藏医 藏戏 藏药 藏蓝 蔵  
    ze#择 择善  
    zeng#曾孙 曾祖  
    za#绑扎 结扎 包扎 捆扎  
    zai#牛仔 龟仔 龙仔 鼻仔 羊仔  仔仔 麻仔  麵包仔 麦旺仔 鸿仔 煲仔 福仔  
    zha#扎 马扎 挣扎 扎啤 扎根 扎手 扎针 扎花 扎堆 扎营 扎实 稳扎 柞水 麻扎镇 麻扎乡 喳 栅栏  
    zhai#择菜  
    zhan#不粘 粘贴 粘连  
    zhao#朝朝 明朝 朝晖 朝夕 朝思 有朝 今朝 朝气 朝三 朝秦 朝霞 鹰爪 龙爪 魔爪 爪牙 失着 着数 龙爪槐  
    zhe#折 破折 打折 叠 曲折 折冲 存折  折合 折旧 折纸 骨折 折返 折价 折算 波折 折扇 对折 不折 折扣 七折 折中 拙著 要著 著文 新著 着 本着 对着  
    zhi#标识 嘎吱 咯吱 吱扭 吱吱 繁殖 增殖 养 生殖 殖民 枝  
    zhong#重 重量 鹏重 种  
    zhou#粥  
    zhu#属意 著录 撰著 名著 专著 著述 著作 显著 昭著 原著 著名 著书 遗著 论著 著者 编著 卓著 译著 著称  
    zhua#爪  
    zhui#椎 椎骨 尾椎 椎间 腰椎 胸椎 颈椎 脊椎  
    zhuo#执著 着装 着落 着意 着力 附着 着笔 胶着 着手 着重 穿着 衣着 执着 着眼 着墨 着实 沉着 着陆 着想 着色  
    zhuang#幢房 一幢 幢楼  
    zi#吱声 兹 来兹 今兹 仔细 仔猪  
    zu#足 沐足 足道  
    zuo#撮毛 小撮 柞绸 柞蚕 柞树 柞木  
    zui#咀唇 尖沙咀 黄达咀 黄土咀 鹰咀
    

    工具类代码

        package com.cloudstrip.utils;  
          
        import java.io.BufferedReader;  
        import java.io.IOException;  
        import java.io.InputStream;  
        import java.io.InputStreamReader;  
        import java.util.Arrays;  
        import java.util.HashMap;  
        import java.util.List;  
        import java.util.Map;  
        import net.sourceforge.pinyin4j.PinyinHelper;  
        import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;  
        import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;  
        import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;  
        import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;  
          
        /** 
         * 汉字转拼音,能处理多音字 
         *  
         * @author feng bingbing 
         *  
         */  
          
        public class ChineseToPinyinUtil {  
          
            private static Map<String, List<String>> pinyinMap = new HashMap<String, List<String>>();  
            private static long count = 0;  
          
            public static String toPinyin(String str) {  
                //      String str = "龙港巷店";  
                        initPinyin("/duoyinzi_dic.txt");  
                        String py = convertChineseToPinyin(str);  
                        System.out.println(str+" = "+py);
    					return py;  
            }  
            
            public static void main(String[] args) {
        		String pinyin = ChineseToPinyinUtil.toPinyin("重庆江北机场T2");
        		String firstPinYin = pinyin.substring(0, 1).toUpperCase();
        		System.out.println(firstPinYin);
    		}
            /** 
             * 将某个字符串的首字母 大写 
             * @param str 
             * @return 
             */  
            public static String convertInitialToUpperCase(String str){  
                if(str==null){  
                    return null;  
                }  
                StringBuffer sb = new StringBuffer();  
                char[] arr = str.toCharArray();  
                for(int i=0;i<arr.length;i++){  
                    char ch = arr[i];  
                    if(i==0){  
                        sb.append(String.valueOf(ch).toUpperCase());  
                    }else{  
                        sb.append(ch);  
                    }  
                }  
                  
                return sb.toString();  
            }  
          
            /** 
             * 汉字转拼音 最大匹配优先 
             * @param chinese 
             * @return 
             */  
            private static String convertChineseToPinyin(String chinese) {  
          
                StringBuffer pinyin = new StringBuffer();  
          
                HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();  
                defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);  
                defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);  
          
                char[] arr = chinese.toCharArray();  
          
                for (int i = 0; i < arr.length; i++) {  
          
                    char ch = arr[i];  
          
                    if (ch > 128) { // 非ASCII码  
                        // 取得当前汉字的所有全拼  
                        try {  
          
                            String[] results = PinyinHelper.toHanyuPinyinStringArray(  
                                    ch, defaultFormat);  
          
                            if (results == null) {  //非中文  
          
                                return "";  
                            } else {  
          
                                int len = results.length;  
          
                                if (len == 1) { // 不是多音字  
          
        //                          pinyin.append(results[0]);  
                                    String py = results[0];       
                                    if(py.contains("u:")){  //过滤 u:  
                                        py = py.replace("u:", "v");  
                                        System.out.println("filter u:"+py);  
                                    }  
                                    pinyin.append(convertInitialToUpperCase(py));  
                                      
                                }else if(results[0].equals(results[1])){    //非多音字 有多个音,取第一个  
                                      
        //                          pinyin.append(results[0]);  
                                    pinyin.append(convertInitialToUpperCase(results[0]));  
                                      
                                }else { // 多音字  
                                      
                                    System.out.println("多音字:"+ch);  
                                      
                                    int length = chinese.length();  
                                      
                                    boolean flag = false;  
                                      
                                    String s = null;  
                                      
                                    List<String> keyList =null;  
                                      
                                    for (int x = 0; x < len; x++) {  
                                          
                                        String py = results[x];  
                                          
                                        if(py.contains("u:")){  //过滤 u:  
                                            py = py.replace("u:", "v");  
                                            System.out.println("filter u:"+py);  
                                        }  
          
                                        keyList = pinyinMap.get(py);  
                                          
                                        if (i + 3 <= length) {   //后向匹配2个汉字  大西洋   
                                            s = chinese.substring(i, i + 3);  
                                            if (keyList != null && (keyList.contains(s))) {  
        //                                  if (value != null && value.contains(s)) {  
          
                                                System.out.println("last 2 > " + py);  
        //                                      pinyin.append(results[x]);  
                                                pinyin.append(convertInitialToUpperCase(py));  
                                                flag = true;  
                                                break;  
                                            }  
                                        }  
                                          
                                        if (i + 2 <= length) {   //后向匹配 1个汉字  大西  
                                            s = chinese.substring(i, i + 2);  
                                            if (keyList != null && (keyList.contains(s))) {  
          
                                                System.out.println("last 1 > " + py);  
        //                                      pinyin.append(results[x]);  
                                                pinyin.append(convertInitialToUpperCase(py));  
                                                flag = true;  
                                                break;  
                                            }  
                                        }  
                                          
                                        if ((i - 2 >= 0) && (i+1<=length)) {  // 前向匹配2个汉字 龙固大  
                                            s = chinese.substring(i - 2, i+1);  
                                            if (keyList != null && (keyList.contains(s))) {  
                                                  
                                                System.out.println("before 2 < " + py);  
        //                                      pinyin.append(results[x]);  
                                                pinyin.append(convertInitialToUpperCase(py));  
                                                flag = true;  
                                                break;  
                                            }  
                                        }  
                                          
                                        if ((i - 1 >= 0) && (i+1<=length)) {  // 前向匹配1个汉字   固大  
                                            s = chinese.substring(i - 1, i+1);  
                                            if (keyList != null && (keyList.contains(s))) {  
                                                  
                                                System.out.println("before 1 < " + py);  
        //                                      pinyin.append(results[x]);  
                                                pinyin.append(convertInitialToUpperCase(py));  
                                                flag = true;  
                                                break;  
                                            }  
                                        }  
                                          
                                        if ((i - 1 >= 0) && (i+2<=length)) {  //前向1个,后向1个      固大西  
                                            s = chinese.substring(i - 1, i+2);  
                                            if (keyList != null && (keyList.contains(s))) {  
                                                  
                                                System.out.println("before last 1 <> " + py);  
        //                                      pinyin.append(results[x]);  
                                                pinyin.append(convertInitialToUpperCase(py));  
                                                flag = true;  
                                                break;  
                                            }  
                                        }  
                                    }  
                                      
                                    if (!flag) {    //都没有找到,匹配默认的 读音  大   
                                          
                                        s = String.valueOf(ch);  
                                          
                                        for (int x = 0; x < len; x++) {  
                                              
                                            String py = results[x];  
                                              
                                            if(py.contains("u:")){  //过滤 u:  
                                                py = py.replace("u:", "v");  
                                                System.out.println("filter u:");  
                                            }  
                                              
                                            keyList = pinyinMap.get(py);  
                                              
                                            if (keyList != null && (keyList.contains(s))) {  
                                                  
                                                System.out.println("default = " + py);  
        //                                      pinyin.append(results[x]);  //如果不需要拼音首字母大写 ,直接返回即可  
                                                pinyin.append(convertInitialToUpperCase(py));//拼音首字母 大写  
                                                break;  
                                            }  
                                        }  
                                    }  
                                }  
                            }  
          
                        } catch (BadHanyuPinyinOutputFormatCombination e) {  
                            e.printStackTrace();  
                        }  
                    } else {  
                        pinyin.append(arr[i]);  
                    }  
                }  
                return pinyin.toString();  
            }  
          
            /** 
             * 初始化 所有的多音字词组 
             *  
             * @param fileName 
             */  
            public static void initPinyin(String fileName) {  
                // 读取多音字的全部拼音表;  
                InputStream file = PinyinHelper.class.getResourceAsStream(fileName);  
          
                BufferedReader br = new BufferedReader(new InputStreamReader(file));  
          
                String s = null;  
                try {  
                    while ((s = br.readLine()) != null) {  
          
                        if (s != null) {  
                            String[] arr = s.split("#");  
                            String pinyin = arr[0];  
                            String chinese = arr[1];  
          
                            if(chinese!=null){  
                                String[] strs = chinese.split(" ");  
                                List<String> list = Arrays.asList(strs);  
                                pinyinMap.put(pinyin, list);  
                            }  
                        }  
                    }  
          
                } catch (IOException e) {  
                    e.printStackTrace();  
                }finally{  
                    try {  
                        br.close();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  
    

    实例代码

        public static void main(String[] args) {
        		String pinyin = ChineseToPinyinUtil.toPinyin("重庆江北机场T2");
        		String firstPinYin = pinyin.substring(0, 1).toUpperCase();
        		System.out.println(firstPinYin);
    		}
    

    结果

    在这里插入图片描述

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,134
精华内容 4,053
关键字:

多音字