■实例说明
语音识别的时候,两个用户哥读了一段语音,我们怎么判断两个用户读的内容是否相同呢?
因为语音识别出来的内容,不一定是完全一致的,有写同音字识别上会有问题,特别是名字等没有任何特征的词。
这个时候我们可以将识别出来的内容转成拼音,然后比较拼音是否相同
1)汉字转拼音
ps:我们主要使用这个组件,里面有很多转汉字的例子
https://github.com/mozillazg/go-pinyin
■实例代码
[Golang] 纯文本查看 复制代码 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:[[wo] [ai] [xue] [xi]]
// targetPys:[[o wo wu o o] [ai ai] [xue] [shan]]
// 只要targetPys中一四组拼音,代表四个字,只要每一组中的任意一个拼音,
// 在srcPys中对应的组中存在,则该组拼音相同
for i, tpys := range targetPys {
find := false
for _, tpy := range tpys {
for _, spy := range srcPys[i] {
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))
// [[zhong] [guo] [ren]]
// 开启多音字
hans1 := "行伍出身"
a1 := pinyin.NewArgs()
a1.Heteronym = true
fmt.Println(pinyin.Pinyin(hans1, a1))
// [[xing hang heng xing hang] [wu] [chu] [shen juan]]
// 通过这里的输出内容,我们也可以看出,这里的转拼音只是机械性的一个字一个字的转,本身不会进行语意分析。
}
|