太厉害了!程序员竟开发出这么多个汉字转拼音工具
开源最前线 猿妹 整编
GitHub上一直有很多有意思的开源小工具,今天和大家分享一个可以把你汉字转换成拼音的开源工具 — pinyin,例如:汉字拼音 ➜ hàn zì pīn yīn 。
截至今日,该项目已经获得了 3523 个「star」以及 489 个「fork」,而且开发者也是十分勤奋,上一次更新就在两天前。(GitHub项目地址:https://github.com/hotoo/pinyin)
这个开源工具就是帮助你把中文字符转换为拼音,可用于可以用于汉字注音、排序、检索。而且支持在Node 和 Web 浏览器环境运行。具有如下特性:
● 根据词组智能匹配最正确的拼音。
● 支持多音字。
● 简单的繁体支持。
● 支持多种不同拼音风格。
而且这个小工具还有不同语言版本,包括JavaScript、Python、Go、Rust,下面我们主要介绍Node.js/JavaScript 版本:
1.Node.js/JavaScript 版
安装:
via npm
npm install pinyin
用法:
var pinyin = require("pinyin");
console.log(pinyin("中心")); // [ [ 'zhōng' ], [ 'xīn' ] ]
console.log(pinyin("中心", {
heteronym: true // 启用多音字模式
})); // [ [ 'zhōng', 'zhòng' ], [ 'xīn' ] ]
console.log(pinyin("中心", {
heteronym: true, // 启用多音字模式
segment: true // 启用分词,以解决多音字问题。
})); // [ [ 'zhōng' ], [ 'xīn' ] ]
console.log(pinyin("中心", {
style: pinyin.STYLE_INITIALS, // 设置拼音风格
heteronym: true
})); // [ [ 'zh' ], [ 'x' ] ]
命令行:
pinyin 中心
zhōng xīn
pinyin -h // [ [ 'zh' ], [ 'x' ] ]
方法 <Array> pinyin(words[, options])
将传入的中文字符串 (words) 转换成拼音符号串。options 是可选的,可以设定拼音风格,或打开多音字选项。返回二维数组,第一维每个数组项位置对应每个中文字符串位置。 第二维是各个汉字的读音列表,多音字会有多个拼音项。
方法 Number pinyin.compare(a, b)
按拼音排序的默认算法。
参数
<Boolean> options.segment:是否启用分词模式,中文分词有助于极大的降低多音字问题。 但性能会极大的下降,内存也会使用更多。
<Boolean> options.heteronym:是否启用多音字模式,默认关闭。关闭多音字模式时,返回每个汉字第一个匹配的拼音。启用多音字模式时,返回多音字的所有拼音列表。
<Object> options.style:指定拼音风格。可以通过以下几种 STYLE_ 开头的静态属性进行指定:
静态属性
.STYLE_NORMAL:普通风格,即不带声调。如:pin yin
.STYLE_TONE:声调风格,拼音声调在韵母第一个字母上。注:这是默认的风格。如:pīn yīn
.STYLE_TONE2:声调风格 2,即拼音声调以数字形式在各个拼音之后,用数字 [0-4] 进行表示。如:pin1 yin1
.STYLE_TO3NE:声调风格 3,即拼音声调以数字形式在注音字符之后,用数字 [0-4] 进行表示。如:pi1n yi1n
.STYLE_INITIALS:声母风格,只返回各个拼音的声母部分。对于没有声母的汉字,返回空白字符串。如:中国的拼音: zh g。声明风格会区分 zh 和 z,ch 和 c,sh 和 s。
注意:部分汉字没有声母,如 啊,饿 等,另外 y, w, yu 都不是声母, 这些汉字的拼音声母风格会返回 ""。
.STYLE_FIRST_LETTER:首字母风格,只返回拼音的首字母部分。
为什么没有 y, w, yu 几个声母?
因为根据《汉语拼音方案》, y,w,ü (yu) 都不是声母,在某些特定韵母无声母时,才加上 y 或 w,而 ü 也有其特定规则。
2.Python 版
Python版本地址:https://github.com/mozillazg/python-pinyin
安装:
$ pip install pypinyin
使用示例:
Python 3(Python 2 下把 '中心' 替换为 u'中心' 即可):
> pinyin('中心')
[['zhōng'], ['xīn']]
> pinyin('中心', heteronym=True) # 启用多音字模式
[['zhōng', 'zhòng'], ['xīn']]
> pinyin('中心', style=Style.FIRST_LETTER) # 设置拼音风格
[['z'], ['x']]
> pinyin('中心', style=Style.TONE2, heteronym=True)
[['zho1ng', 'zho4ng'], ['xi1n']]
> pinyin('中心', style=Style.BOPOMOFO) # 注音风格
[['ㄓㄨㄥ'], ['ㄒㄧㄣ']]
> pinyin('中心', style=Style.CYRILLIC) # 俄语字母风格
[['чжун1'], ['синь1']]
> lazy_pinyin('中心') # 不考虑多音字的情况
['zhong', 'xin']
> from pypinyin import pinyin, lazy_pinyin, Style3. Go 版
Go版本地址:https://github.com/mozillazg/go-pinyin
安装:
go get -u github.com/mozillazg/go-pinyin
install CLI tool:
go get -u github.com/mozillazg/go-pinyin/cmd/pinyin
$ pinyin 中国人
zhōng guó rén
示例:
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 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]
}
4.Rust 版
Rust版本地址:https://github.com/mozillazg/rust-pinyin
Add this to your Cargo.toml:
[dependencies]
pinyin = "0.4"
示例:
extern crate pinyin;
pub fn main() {
let hans = "中国人";
let mut args = pinyin::Args::new();
// 默认输出 [["zhong"] ["guo"] ["ren"]]
println!("{:?}", pinyin::pinyin(hans, &args));
// ["zhong", "guo", "ren"]
println!("{:?}", pinyin::lazy_pinyin(hans, &args));
// 包含声调 [["zhōng"], ["guó"], ["rén"]]
args.style = pinyin::Style::Tone;
println!("{:?}", pinyin::pinyin(hans, &args));
// 声调用数字表示 [["zho1ng"] ["guo2"] ["re2n"]]
args.style = pinyin::Style::Tone2;
println!("{:?}", pinyin::pinyin(hans, &args));
// 开启多音字模式
args = pinyin::Args::new();
args.heteronym = true;
// [["zhong", "zhong"] ["guo"] ["ren"]]
println!("{:?}", pinyin::pinyin(hans, &args));
// [["zho1ng", "zho4ng"] ["guo2"] ["re2n"]]
args.style = pinyin::Style::Tone2;
println!("{:?}", pinyin::pinyin(hans, &args));
}
你以为这就完了么?当然不是,猿妹搜索了一下,GitHub上类似的项目还有很多,这边举几个相似的项目:
1、pinyin4j
Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 (项目地址:https://github.com/belerweb/pinyin4j)
2、pinyin
Pinyin 是一个将中文转换为拼音的PHP工具,支持多音字,以及10w+常用词的正确音译,基于CC-CEDICT 词典。(详情:https://github.com/overtrue/pinyin)
3、jpinyin
JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进。具有以下特性:
1、准确、完善的字库;Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字(异体字不存在标准拼音)之外的所有汉字;
2、拼音转换速度快;经测试,转换Unicode编码从4E00-9FA5范围的20902个汉字,JPinyin耗时约100毫秒。
3、多拼音格式输出支持;JPinyin支持多种拼音输出格式:带音标、不带音标、数字表示音标以及拼音首字母输出格式;
4、常见多音字识别;JPinyin支持常见多音字的识别,其中包括词组、成语、地名等;
5、简繁体中文转换;
6、支持添加用户自定义字典(项目地址:https://github.com/qzw1210/jpinyin)
4、PinYin4Objc
PinYin4Objc是一个流行的objective-c库,支持中文(简体和繁体)字符和最流行的拼音系统之间的转换,它的性能非常高效,第一次缓存数据,你可以使用async方法和块,这可以避免ui阻塞,并顺利运行。拼音的输出格式可以定制。(详情:https://github.com/kimziv/PinYin4Objc)
5、chineseandpinyin
Java版汉字转拼音工具,支持多样化输出、拼音排序、中英混合排序!(详情:https://github.com/51isunshine/chineseandpinyin)
开源中国征稿开始啦!
开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 200 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。
现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿
Win10 巨硬!就不喜欢你们用 Edge 下载别家浏览器的样子
微软开源的 Sketch2Code 碉堡了!草图秒变 HTML 代码