首页 > 其他分享 >Golang 中文转拼音

Golang 中文转拼音

时间:2023-06-22 16:11:14浏览次数:56  
标签:---- 中文 拼音 fmt ng Golang dict Println

翻遍整个 GitHub , Golang 中文转拼音类库, 怎么就这么难找呢? 于是我造了一个轮子: 中文转拼音类库. 目前来说应该是最好用的了.

GitHub 传送门: https://github.com/Lofanmi/pinyin-golang

如果说基于汉字拼音字典, 逐个汉字替换, 也是可以转换的, 但是碰到多音字就很麻烦了. 而基于词库, 最起码可以解决大多数的多音字的转换, 人名姓氏的转换.

最开始我用了 CC-CEDICT 词典, 基于词组的长度, 以及英文释义的丰富程度, 来决定替换的优先级, 词组越长优先替换, 英文解释越丰富, 说明它越常用, 拥有更高的优先级, 后来发现它很多汉字都没有收录, 更别说生僻字了.

现在我把 安正超 的 PHP 开源项目 overtrue/pinyin 中的词库搬过来, 整理成一个 []string 放在 go 文件里面, 978K , 编译完也不需要依赖词库了, 非常符合 Go 的气质.

当然也不能说它可以解决 100% 的转换, 多多少少肯定会有瑕疵, 但是问题不大, 完善好词库, 对付一般的转换是绝对没问题的. 如果想完全解决, 词库定会无比庞大...

用法很简单, 接口都很清晰, 不再赘述.

INSTALL

go get -u -v github.com/Lofanmi/pinyin-golang/pinyin

DEMO

package main

import (
	"fmt"

	"github.com/Lofanmi/pinyin-golang/pinyin"
)

func main() {
	dict := pinyin.NewDict()

	// ----
	// 简单用法
	// ----

	// Redis shì yí gè Key-Value cún chǔ xì tǒng.
	str := `Redis 是一个 Key-Value 存储系统。`
	fmt.Println(dict.Sentence(str).Unicode())

	s := ""

	// wǒ hé shí néng bào fù
	s = dict.Convert(`我,何時能暴富?`, " ").Unicode()
	fmt.Println(s)
	// wǒ, hé shí néng bào fù?
	s = dict.Sentence(`我,何時能暴富?`).Unicode()
	fmt.Println(s)

	// ----
	// 转换接口: Dict.Convert
	// ----

	// 输入繁体中文, 输出为带 空格 分隔的拼音字符串
	// ASCII 格式显示
	// wo3 he2 shi2 neng2 bao4 fu4
	s = dict.Convert(`我,何時能暴富?`, " ").ASCII()
	fmt.Println(s)

	// 输入简体中文, 输出为带 连字符- 分隔的拼音字符串
	// Unicode 格式显示
	// wǒ-hé-shí-néng-bào-fù
	s = dict.Convert(`我,何时能暴富?`, "-").Unicode()
	fmt.Println(s)

	// 转换简体中文和繁体中文, 转换为带 斜杆/ 分隔的拼音字符串
	// 不显示声调
	// wo/he/shi/neng/bao/fu
	s = dict.Convert(`我,何时能暴富?`, "/").None()
	fmt.Println(s)

	// ----
	// 句子接口: Dict.Sentence
	// ----

	// 输入繁体中文, 输出为带 空格 分隔的拼音字符串
	// ASCII 格式显示
	// wo3, he2 shi2 neng2 bao4 fu4?
	s = dict.Sentence(`我,何時能暴富?`).ASCII()
	fmt.Println(s)

	// 输入简体中文, 输出为带 空格 分隔的拼音字符串
	// Unicode 格式显示
	// wǒ, hé shí néng bào fù?
	s = dict.Sentence(`我,何时能暴富?`).Unicode()
	fmt.Println(s)

	// 转换简体中文和繁体中文, 转换为带 空格 分隔的拼音字符串
	// 不显示声调
	// wo, he shi neng bao fu?
	s = dict.Sentence(`我,何时能暴富?`).None()
	fmt.Println(s)

	// ----
	// 转换人名: Dict.Name
	// ----

	// 输入繁体中文, 输出为带 空格 分隔的人名拼音字符串
	// ASCII 格式显示
	// mo4 qi2 wo4 xi3 huan1 chi1 suan1 nai3
	s = dict.Name(`万俟沃喜欢吃酸奶`, " ").ASCII()
	fmt.Println(s)

	// 输入简体中文, 输出为带 连字符- 分隔的人名拼音字符串
	// Unicode 格式显示
	// mò-qí-wò-xǐ-huan-chī-suān-nǎi
	s = dict.Name(`万俟沃喜欢吃酸奶`, "-").Unicode()
	fmt.Println(s)

	// 转换简体中文和繁体中文, 转换为带 斜杆/ 分隔的人名拼音字符串
	// 不显示声调
	// mo/qi/wo/xi/huan/chi/suan/nai
	s = dict.Name(`万俟沃喜欢吃酸奶`, "/").None()
	fmt.Println(s)

	// ----
	// 转换拼音简写: Dict.Abbr
	// ----

	// 转换简体中文和繁体中文, 输出为带 连字符- 分隔的拼音字符串首字符
	// m-q-w-x-h-c-s-n
	s = dict.Abbr(`万俟沃喜欢吃酸奶`, "-")
	fmt.Println(s)

	// ----
	// 转换为字符串 slice: ToSlice
	// ----
	// wo3 he2 shi2 neng2 bao4 fu4
	s = dict.Convert(`我,何時能暴富?`, " ").ASCII()
	fmt.Println(s)

	// [wo3 he2 shi2 neng2 bao4 fu4]
	fmt.Printf("%v", pinyin.ToSlice(s))

	// $ go run main.go
	// Redis shì yí gè Key-Value cún chǔ xì tǒng.
	// wǒ hé shí néng bào fù
	// wǒ, hé shí néng bào fù?
	// wo3 he2 shi2 neng2 bao4 fu4
	// wǒ-hé-shí-néng-bào-fù
	// wo/he/shi/neng/bao/fu
	// wo3, he2 shi2 neng2 bao4 fu4?
	// wǒ, hé shí néng bào fù?
	// wo, he shi neng bao fu?
	// mo4 qi2 wo4 xi3 huan1 chi1 suan1 nai3
	// mò-qí-wò-xǐ-huān-chī-suān-nǎi
	// mo/qi/wo/xi/huan/chi/suan/nai
	// m-q-w-x-h-c-s-n
	// wo3 he2 shi2 neng2 bao4 fu4
	// [wo3 he2 shi2 neng2 bao4 fu4]
}

Contribution

欢迎提意见及完善词库

License

MIT


文章来源于本人博客,发布于 2018-06-02,原文链接:https://imlht.com/archives/159/

标签:----,中文,拼音,fmt,ng,Golang,dict,Println
From: https://www.cnblogs.com/lofanmi/p/17497950.html

相关文章

  • sentence-transformers(SBert)中文文本相似度预测(附代码)
    sentence-transformers(SBert)中文文本相似度预测(附代码)https://blog.csdn.net/weixin_54218079/article/details/128687878https://gitee.com/liheng103/sbert-evaluatehttps://www.sbert.net/ 训练模型创建网络:使用Sbert官方给出的预训练模型sentence_hfl_chinese-rober......
  • 3Dmax2020中文版下载-3Dmax2020中文免费安装包下载 软件大全
    3dmax2022中文版是一款专业优秀的三维建模渲染工具。3dmax2022最新版增新了艺术渲染器,能够使用与360相同的光线追踪引擎,同时扩展了对OSL着色的支持。3dmax2022软件优化了视口播放功能和动画预览,用户可以精准的可视化工作结果,从而有效提高了内容的创建过程。[下载地址]:后台私信我3d......
  • ubuntu从中文切换成英文的方法
    ubuntu从中文切换成英文的方法有台电脑装系统的时候装了ubuntu中文版,但后来改用做服务器了。结果每次用命令行登录,所有的提示信息都只能看到乱码。网上查了一下切换的方法,由于发行版不同,并不是十分靠谱。最后总结下来,主要做两件事情。修改/etc/default/locale文......
  • Golang如何优雅地关闭 channel
    Golang如何优雅地关闭channel萧瑟 golang面试经典讲解 2023-05-3121:00 发表于上海一、介绍想必听说过go的,应该都知道go的最大的特性goroutine并发编程,而说到并发编程,使用channel进行数据传输是go中的必修课。go的并发哲学:不要通过共享内存来通信,而要通过通......
  • mmseg4j 中文分词器的一些简介整理
    在lucene中,我们是使用IndexWriter调用Analyzer将文章切成以词为单位的Stream,然后生成索引的。lucene内建的分词器很多,比如:按空白字符分词的WhitespaceAnalyzer,添加了stopword过滤的StopAnalyzer,以及最常用的是StandardAnalyzer。这些自带的分词器对中文支持多不好,我觉得比......
  • golang的位运算
    二进制字节位的几个操作例子:0110&1011=0010//与AND都为10110|1011=1111//或OR至少一个为10110^1011=1101//异或XOR只能一个为10110&^1011=0100//位清除ANDNOT清除标志位,不都为1a&^b的意思就是清零a中,ab都为1......
  • Golang 图片上绘制文字
    之前介绍过使用FreeType-go来绘制字现在相关的包被做了整合,主要是整合到了github.com/golang/freetype和golang.org/x/image/font这里了,所以就有了这篇博客。 例子代码在:https://github.com/golang/freetype/blob/master/example/freetype/main.go packagemainimport(......
  • 中文自然语言处理开放任务介绍、数据集、当前最佳结果分享
        本文整理了中文自然语言处理相关开放任务,详细任务说明,数据集,相关评价指标,以及当前最佳结果整理。涉及指代消歧,对话状态管理,情绪分类,实体链接,实体标注(EntityTagging),语言模型,机器翻译,词性标注,问答,关系抽取等任务。    本文内容整理自滴滴NLP实验室Wiki:https://c......
  • excel中阿拉伯数字与中文的互转换
    1、阿拉伯数字转为中文数字:使用NUMBERSTRING()函数,支持三种格式的转换。2、中文数字转为阿拉伯数字:在F4中输入公式【=MATCH(A2,TEXT(ROW($1:$9999),"[DBnum1]"),0)】,使用Ctrl+Shift+Enter回车后得到数组公式{=MATCH(A2,TEXT(ROW($1:$9999),"[DBnum1]"),0)},然后向下复制公式即......
  • zabbix设置中文后乱码问题解决
    zabbix设置中文后乱码问题解决 1.在本机控制面板找到字体选项(或者C:\Windows\Fonts文件夹选择一个上传到centos服务器中也可以)注意是复制,不是切题,因为windows系统自己还得要用字体。我这里选择的是简体黑体 2.服务器搜索zabbix的fonts目录 find/-namefonts cd......