golang中文汉字转汉语拼音转换插件库go-pinyin的使用
go-pinyin: Golang中文汉字转汉语拼音转换插件库使用指南
安装
使用go get命令安装go-pinyin库:
go get github.com/mozillazg/go-pinyin
安装CLI工具:
# go版本>=1.17
go install github.com/mozillazg/go-pinyin/cli/pinyin@latest
# go版本<1.17
go get -u github.com/mozillazg/go-pinyin/cli/pinyin
$ pinyin 中国人
zhōng guó rén
使用示例
下面是一个完整的示例代码,展示如何使用go-pinyin进行中文汉字到拼音的转换:
package main
import (
"fmt"
"github.com/mozillazg/go-pinyin"
)
func main() {
hans := "中国人"
// 默认转换
a := pinyin.NewArgs()
fmt.Println(pinyin.Pinyin(hans, a))
// 输出: [[zhong] [guo] [ren]]
// 包含声调
a.Style = pinyin.Tone
fmt.Println(pinyin.Pinyin(hans, a))
// 输出: [[zhōng] [guó] [rén]]
// 声调用数字表示
a.Style = pinyin.Tone2
fmt.Println(pinyin.Pinyin(hans, a))
// 输出: [[zho1ng] [guo2] [re2n]]
// 开启多音字模式
a = pinyin.NewArgs()
a.Heteronym = true
fmt.Println(pinyin.Pinyin(hans, a))
// 输出: [[zhong] [guo] [ren]]
a.Style = pinyin.Tone2
fmt.Println(pinyin.Pinyin(hans, a))
// 输出: [[zho1ng zho4ng] [guo2] [re2n]]
// 懒人拼音(不保留多音字)
fmt.Println(pinyin.LazyPinyin(hans, pinyin.NewArgs()))
// 输出: [zhong guo ren]
// 转换函数
fmt.Println(pinyin.Convert(hans, nil))
// 输出: [[zhong] [guo] [ren]]
fmt.Println(pinyin.LazyConvert(hans, nil))
// 输出: [zhong guo ren]
}
注意事项
-
默认情况下会忽略没有拼音的字符(可以通过自定义Fallback参数的值来自定义如何处理没有拼音的字符)
-
根据《汉语拼音方案》,y、w、ü (yu) 都不是声母,且不是所有拼音都有声母。如果需要首字母风格,可以使用FirstLetter样式。
相关项目
- hotoo/pinyin: 汉语拼音转换工具 Node.js/JavaScript 版
- mozillazg/python-pinyin: 汉语拼音转换工具 Python 版
- mozillazg/rust-pinyin: 汉语拼音转换工具 Rust 版
拼音数据
使用pinyin-data的拼音数据
许可证
基于MIT许可证
更多关于golang中文汉字转汉语拼音转换插件库go-pinyin的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang中文汉字转汉语拼音转换插件库go-pinyin的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
go-pinyin 库使用指南
go-pinyin 是一个将中文汉字转换为汉语拼音的 Go 语言库,支持多种拼音风格和分词选项。
安装
go get -u github.com/mozillazg/go-pinyin
基本使用
简单转换
package main
import (
"fmt"
"github.com/mozillazg/go-pinyin"
)
func main() {
hans := "你好世界"
// 默认风格,带声调
p := pinyin.NewArgs()
fmt.Println(pinyin.Pinyin(hans, p))
// 输出: [[nǐ] [hǎo] [shì] [jiè]]
// 不带声调
p.Style = pinyin.Normal
fmt.Println(pinyin.Pinyin(hans, p))
// 输出: [[ni] [hao] [shi] [jie]]
}
参数配置
go-pinyin 提供了多种配置选项:
args := pinyin.NewArgs()
// 拼音风格
args.Style = pinyin.Tone // 带声调(默认) nǐ hǎo
args.Style = pinyin.Tone2 // 声调在拼音后 ni3 hao3
args.Style = pinyin.Tone3 // 数字声调在最后 n3i h3ao
args.Style = pinyin.Initials // 只要声母 n h
args.Style = pinyin.FirstLetter // 首字母 n h
args.Style = pinyin.Normal // 不带声调 ni hao
// 其他选项
args.Heteronym = true // 启用多音字模式
args.Separator = "-" // 设置拼音分隔符
args.Fallback = func(r rune, a pinyin.Args) []string {
return []string{string(r)} // 无法转换的字符回调
}
多音字处理
func main() {
hans := "银行行长一行人在银行的行长椅上"
args := pinyin.NewArgs()
args.Heteronym = true // 启用多音字模式
fmt.Println(pinyin.Pinyin(hans, args))
// 输出: [[yín] [háng xíng] [háng xíng zhǎng] [yī xíng háng] [de] [rén] [zài] [yín] [háng] [de] [háng xíng zhǎng] [yǐ]]
}
获取拼音字符串
func main() {
hans := "中华人民共和国"
args := pinyin.NewArgs()
args.Style = pinyin.Normal
// 获取二维拼音切片
pys := pinyin.Pinyin(hans, args)
fmt.Println(pys)
// 输出: [[zhong] [hua] [ren] [min] [gong] [he] [guo]]
// 拼接为字符串
var result []string
for _, items := range pys {
result = append(result, items[0])
}
fmt.Println(strings.Join(result, " "))
// 输出: zhong hua ren min gong he guo
// 或者使用LazyPinyin直接获取一维切片
fmt.Println(pinyin.LazyPinyin(hans, args))
// 输出: [zhong hua ren min gong he guo]
}
自定义字典
如果需要处理特殊字符或覆盖默认拼音,可以自定义字典:
func main() {
hans := "㑇"
// 默认无法转换
args := pinyin.NewArgs()
fmt.Println(pinyin.Pinyin(hans, args))
// 输出: [[]]
// 添加自定义拼音
pinyin.AddDict("㑇", "zhou4")
fmt.Println(pinyin.Pinyin(hans, args))
// 输出: [[zhòu]]
}
高级用法
处理姓名
func main() {
name := "单于"
args := pinyin.NewArgs()
args.Heteronym = true
// 普通模式
fmt.Println(pinyin.Pinyin(name, args))
// 输出: [[dān shàn chán] [yú]]
// 姓名模式
args.Fallback = func(r rune, a pinyin.Args) []string {
// 处理姓氏多音字
if r == '单' {
return []string{"shàn"}
}
if r == '于' {
return []string{"yú"}
}
return pinyin.Fallback(r, a)
}
fmt.Println(pinyin.Pinyin(name, args))
// 输出: [[shàn] [yú]]
}
性能优化
对于大量文本处理,可以预加载字典:
func init() {
// 预加载字典到内存
pinyin.Loading()
}
func main() {
// 大量文本处理...
}
注意事项
- 多音字处理需要上下文分析,库无法100%准确,必要时需要人工干预
- 对于非常用汉字,可能需要自定义字典
- 性能方面,首次调用会有字典加载时间,后续调用较快
go-pinyin 是一个功能全面且灵活的拼音转换库,适合大多数中文文本转拼音的需求。