开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
语音技术

    拼音相似度比较

    简介

    本java demo能将中文转换为拼音,并比较拼音相似度;进而可以在一组候选词中,找到读音与搜索词最为接近的词组。

    该工具能够有效解决同音词、相似发音词、发音不标准等特殊情况下的语音识别。 例如,在通讯录场景下,如果用户需要识别的正确联系人是“张三”,但语音识别接口返回的结果可能是“张山”;此时则可以将用户的联系人列表和“张山”作为输入,通过本工具查找出与“张山”最匹配的结果,有效提高结果的准确率。具体可参考下方的示例。

    示例说明

    本工具的输入包括一组候选词和一个搜索词,输出是每个候选词与搜索词的距离(差异值)。注意:距离越短,相似度越高。

    示例 输入1: 一组候选词,如:"张三", "张散", "张丹", "张成", "李四", "李奎" 输入2: 一个搜索词, 如:“张山” 输出:每个候选词与搜索词的距离(如下)

    [{word=张三, score=2}, {word=张散, score=3}, {word=张丹, score=4}, {word=张成, score=7}, {word=李四, score=18}, {word=李奎, score=20}]

    该结果表示 “张山”与“张三” 发音最为相近,则“张三”是最有可能的正确词汇。

    局限性举例

    以下case将不能很好地适用于本算法,请使用的时候先行评估。

    1.区分s和sh,可能相似

    输入1 输入2 输出
    sao3 shao3 2
    sao3 pao3 2
    sao3 dao3 2
    sao3 hao3 2
    输入1 输入2 输出
    shi1 zhi1 2
    shi1 chi1 2
    shi1 si1 2
    shi1 sha1 2

    2.区分en和eng

    输入1 输入2 输出
    shen1 sheng1 2
    shen1 zhen1 2
    shen1 she1 2
    输入1 输入2 输出
    meng2 men2 2
    meng2 ming2 2
    meng2 mang2 2

    3.区分i和ie

    输入1 输入2 输出
    xi1 pi1 2
    xi1 mi1 2
    xi1 xia1 2
    xi1 xie1 2

    4.区分yue和yu、ye、yun

    输入1 输入2 输出
    yue4 ye4 2
    yue4 yun4 2
    yue4 yu4 2

    5.类似xi’an词语

    输入1 输入2 输出
    xi1,an1 xian1 3
    xi1,an1 xie4,an1 3
    xi1,an1 xin4,an1 3

    重要代码

    计算2个拼音的相似度,

    使用方法如 getEditDistance("zhang1,san1", "zhang1,shan1");

    public static int getEditDistance(String s, String t) {
            int d[][]; // matrix
            int n; // length of s
            int m; // length of t
            int i; // iterates through s
            int j; // iterates through t
            char s_i; // ith character of s
            char t_j; // jth character of t
            int cost; // cost
            // Step 1
            n = s.length();
            m = t.length();
            if (n == 0) {
                return m;
            }
            if (m == 0) {
                return n;
            }
            d = new int[n + 1][m + 1];
    
            // Step 2
            for (i = 0; i <= n; i++) {
                d[i][0] = i;
            }
            for (j = 0; j <= m; j++) {
                d[0][j] = j;
            }
    
            // Step 3
            for (i = 1; i <= n; i++) {
                s_i = s.charAt(i - 1);
                // Step 4
                for (j = 1; j <= m; j++) {
                    t_j = t.charAt(j - 1);
                    // Step 5
                    cost = (s_i == t_j) ? 0 : 1;
                    // Step 6
                    d[i][j] = Minimum(d[i - 1][j] + 1, d[i][j - 1] + 1,
                            d[i - 1][j - 1] + cost);
                }
            }
            // Step 7
            return d[n][m];
        }

    完整示例代码下载(JAVA)

    https://platform.bj.bcebos.com/sdk/asr/asr_doc/doc_download_files/similarwordsV1.zip

    上一篇
    音频文件转码
    下一篇
    开源VAD音频切分工具