admin 发表于 2022-6-8 19:32:05

golang:汉字转拼音,使用拼音pinyin判断两段汉字是否相同

■实例说明
语音识别的时候,两个用户哥读了一段语音,我们怎么判断两个用户读的内容是否相同呢?
因为语音识别出来的内容,不一定是完全一致的,有写同音字识别上会有问题,特别是名字等没有任何特征的词。
这个时候我们可以将识别出来的内容转成拼音,然后比较拼音是否相同
1)汉字转拼音

ps:我们主要使用这个组件,里面有很多转汉字的例子
https://github.com/mozillazg/go-pinyin


■实例代码
package main

import (
        "fmt"
        "unicode/utf8"

        "github.com/mozillazg/go-pinyin"
)

// isSamePinyin 是否相同拼音
func isSamePinyin(srcTxt, targetTxt string) bool {
        // 如果两段文字字数不同,则拼音不同
        if utf8.RuneCountInString(srcTxt) != utf8.RuneCountInString(targetTxt) {
                return false
        }

        // 获取源字符串,目的字符串的拼音
        args := pinyin.NewArgs()
        args.Heteronym = true
        srcPys := pinyin.Pinyin(srcTxt, args)
        targetPys := pinyin.Pinyin(targetTxt, args)
        // 如果拼音数量不同,则拼音不同
        if len(srcPys) != len(targetPys) {
                return false
        }

        // 比较拼音是否相同
        // srcPys:[ ]
        // targetPys:[ ]
        // 只要targetPys中一四组拼音,代表四个字,只要每一组中的任意一个拼音,
        // 在srcPys中对应的组中存在,则该组拼音相同
        for i, tpys := range targetPys {
                find := false
                for _, tpy := range tpys {
                        for _, spy := range srcPys {
                                if spy == tpy {
                                        find = true
                                        break
                                }
                        }
                        if find {
                                break
                        }
                }
                if !find {
                        return false
                }
        }

        return true
}

func main() {
        // 比较两个短句是否拼音一致
        srcTxt := "我爱学习"
        targetTxt := "喔挨雪戏"
        isSame := isSamePinyin(srcTxt, targetTxt)
        fmt.Printf("%+v\n", isSame)
        // true

        // 转拼音
        hans := "中国人"
        // 默认不开启多音字
        a := pinyin.NewArgs()
        fmt.Println(pinyin.Pinyin(hans, a))
        // [ ]

        // 开启多音字
        hans1 := "行伍出身"
        a1 := pinyin.NewArgs()
        a1.Heteronym = true
        fmt.Println(pinyin.Pinyin(hans1, a1))
        // [ ]
        // 通过这里的输出内容,我们也可以看出,这里的转拼音只是机械性的一个字一个字的转,本身不会进行语意分析。
}
页: [1]
查看完整版本: golang:汉字转拼音,使用拼音pinyin判断两段汉字是否相同