查看原文
其他

太厉害了!程序员竟开发出这么多个汉字转拼音工具

开源中国 2018-12-15


开源最前线 猿妹 整编


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'中心' 即可):


>>> from pypinyin import pinyin, lazy_pinyin, Style
>>> 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']



3. 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 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿





推荐阅读

你好,超全的 Vue 开源项目合集,签收一下

Win10 巨硬!就不喜欢你们用 Edge 下载别家浏览器的样子

微软开源的 Sketch2Code 碉堡了!草图秒变 HTML 代码

Python 也摊上事儿了,术语 master-slave 亦恐被无奈修改

给你一份详细的 Spring Boot 知识清单


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存