前言

本文介绍一个 go 汉字转拼音的库 go-pinyin,可以从名字看出这个库的功能就是将汉字转换为相应的拼音。接下来就由我来简单的介绍 go-pinyin 。

安装

使用此命令安装: go get github.com/mozillazg/go-pinyin

cli 安装

如果你的 go 版本在 1.17 以下使用此命令安装: go get -u github.com/mozillazg/go-pinyin/cli/pinyin。1.17及以上版本使用此命令安装:go install github.com/mozillazg/go-pinyin/cli/pinyin@latest

使用

接下来将分别介绍 cli 的使用和 API 的使用。

cli 使用

安装完在终端输入 pinyin,可以看到使用的方法,尝试一个汉字,可以看到相应的拼音,但也可以看出对多音字的支持有问题。 img.png

1
2
3
4
$ pinyin 中国
zhōng guó 
$ pinyin 重庆
zhòng qìng 

接下来介绍 API 的使用。

api 使用

通过查看文档,可以看出主要是2个方法 pinyin.NewArgspinyin.Pinyin

pinyin.NewArgs 创建包含默认配置的 Args, 可以通过修改 Args 的成员来使用不同的模式。

1
2
3
4
5
6
7
8
9
type Args struct {
	Style     int    // 拼音风格(默认: Normal)
	Heteronym bool   // 是否启用多音字模式(默认:禁用)
	Separator string // Slug 中使用的分隔符(默认:-)

	// 处理没有拼音的字符(默认忽略没有拼音的字符)
	// 函数返回的 slice 的长度为0 则表示忽略这个字符
	Fallback func(r rune, a Args) []string
}

pinyin.Pinyin 就是将汉字转为拼音。

接下来看一个简单的例子:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import (
	"fmt"
	"github.com/mozillazg/go-pinyin"
)

func main() {
	hans := "福建"

	// 默认
	a := pinyin.NewArgs()
	fmt.Println(pinyin.Pinyin(hans, a))

	// 包含声调
	a.Style = pinyin.Tone
	fmt.Println(pinyin.Pinyin(hans, a))

	// 声调用数字表示
	a.Style = pinyin.Tone2
	fmt.Println(pinyin.Pinyin(hans, a))
	hans = "重庆"
	// 开启多音字模式
	a = pinyin.NewArgs()
	a.Heteronym = true
	fmt.Println(pinyin.Pinyin(hans, a))
	a.Style = pinyin.Tone2
	fmt.Println(pinyin.Pinyin(hans, a))

}

输出:

1
2
3
4
5
[[fu] [jian]]
[[fú] [jiàn]]
[[fu2] [jia4n]]
[[zhong chong tong] [qing]]
[[zho4ng cho2ng to2ng] [qi4ng]]

通过结果可以看出对多音字的支持有问题。

小结

本文简单介绍了 go 中的中文转拼音的库go-pinyin,通过对库的使用,可以发现词库对多音字的支持有问题,但一些常规的支持还是很完善的。

参考