Pinyin4cj库

介绍

Pinyin4cj 是一个支持将汉字转换成拼音的三方库,输出的拼音格式可以自定义设置。

1 中文转换到汉语拼音,支持多音字

前置条件:NA

场景:

  1. 支持词、句转换成拼音
  2. 支持常用简体/繁体中文字符转换成拼音
  3. 支持常见多音字符转换成拼音
  4. 支持Unicode格式的字符ü、支持声调符号、支持首字母格式
  5. 支持常用简体、繁体中文字符互转
  6. 支持添加自定义字典
  7. 支持通用拼音

约束:在词库中包含文字才能转换,字符 ü、声调符号、首字母只对汉语拼音有效

依赖:

  1. 需要 txt 文件解析

性能:支持版本几何性能持平

可靠性:NA

1.1 支持常用简体/繁体中文字符互转

可以将输入的繁体字符串(或简体字符串)转换成简体字符串(或繁体字符串)。

1.1.1 主要接口

public class ChineseHelper {

    /**
     * 将包含繁体的字符串转换成简体字符串,非汉字原样返回
     * 若有些繁体字转换不成预期的简体字,用户可自定义中文词典
     * 
     * 参数 str - 要转换的字符串
     * 返回值 String - 返回转换后的简体字符串
     *                若 str 为简体字符串,返回结果为它本身
     *                若 str 为空字符串,返回结果为空字符串
     */
    public static func convertToSimplifiedChinese(str: String): String 

    /**
     * 将包含简体的字符串转换成繁体字符串,非汉字原样返回
     * 若有些简体字转换不成预期的繁体字,用户可自定义中文词典
     *
     * 参数 str - 要转换的字符串
     * 返回值 String - 返回转换后的繁体字符串
     *                若 str 为繁体字符串,返回结果为它本身
     *                若 str 为空字符串,返回结果为空字符串
     */
    public static func convertToTraditionalChinese(str: String): String   
}

1.1.2 示例

繁体转简体
import pinyin4cj.*

main() {
    var pinyin: String = ChineseHelper.convertToSimplifiedChinese("臺,喪,麗")
    println(pinyin)
    return 0
}

执行结果如下:

台,丧,丽
简体转繁体
import pinyin4cj.*

main() {
    var pinyin: String = ChineseHelper.convertToTraditionalChinese("我是中国人")
    println(pinyin)
    return 0
}

执行结果如下:

我是中國人

1.2 支持词、句转换成拼音

可以将包含多音字或繁体字的词或句转成拼音

1.2.1 主要接口

public class PinyinHelper {

    /**
     * 将包含多音字或繁体字的词或句转成拼音,按分隔符隔开,非汉字原样返回
     * 若有些字拼音没有达到预期效果,用户可自定义拼音词典
     * 
     * 参数 str - 要转换的字符串
     * 参数 separator - 分隔符
     * 返回值 String - 返回转换后的拼音字符串
     *   - 若 str 为空字符串,抛出异常 Pinyin4cjException - Please enter a word or sentence           
     */
    public static func convertToPinyinString(str: String, separator: String): String
}

1.2.2 示例

import pinyin4cj.*

main() {
    var pinyin: String = PinyinHelper.convertToPinyinString("我是中国共产主义接班人。", " ")
    println(pinyin)
    return 0
}

执行结果如下:

wǒ shì zhōng guó gòng chǎn zhǔ yì jiē bān rén 。

1.3 支持 Unicode 格式的字符ü、支持声调符号、支持拼音首字母的输出格式

可以将包含多音字或繁体字的词或句转成拼音,可以设置拼音输出格式

1.3.1 主要接口

public class PinyinHelper {

    /**
     * 将包含多音字或简体字的词或句转成指定拼音格式的拼音,按分隔符隔开,非汉字原样返回
     * 若有些字拼音没有达到预期效果,用户可自定义拼音词典
     * 
     * 参数 str - 要转换的字符串
     * 参数 separator - 分隔符
     * 参数 format - 输出拼音格式
     * 返回值 String - 返回转换后的拼音字符串
     *   - 若 str 为空字符串,抛出异常 Pinyin4cjException - Please enter a word or sentence  
     */
    public static func convertToPinyinString(str: String, 
                                            separator: String, 
                                            format: PinyinFormat): String
    /**
     * 将包含多音字或繁体字的词或句转成指定拼音格式的拼音,按分隔符隔开,非汉字原样返回
     * 若有些字拼音没有达到预期效果,用户可自定义拼音词典
     * 
     * 参数 str - 要转换的字符串
     * 参数 separator - 分隔符
     * 参数 format - 输出拼音格式
     * 返回值 String - 返回转换后的拼音字符串
     *   - 若 str 为空字符串,抛出异常 Pinyin4cjException - Please enter a word or sentence  
     */
    public static func convertToPinyinStringTraditional(str: String, 
                                                        separator: String, 
                                                        format: PinyinFormat): String
}

1.3.2 包含简体中文字符转拼音示例

import pinyin4cj.*

main() {
    var pinyin: String = PinyinHelper.convertToPinyinString("我是中国共产主义接班人。", " ", PinyinFormat.WITH_TONE_NUMBER)
    println(pinyin)
    return 0
}

执行结果如下:

wo3 shi4 zhong1 guo2 gong4 chan3 zhu3 yi4 jie1 ban1 ren2 。

1.3.3 包含繁体中文字符转拼音示例

import pinyin4cj.*

main() {
    var pinyin: String = PinyinHelper.convertToPinyinStringTraditional("我是中國共產主義接班人。", " ", PinyinFormat.WITH_TONE_NUMBER)
    println(pinyin)
    return 0
}

执行结果如下:

wo3 shi4 zhong1 guo2 gong4 chan3 zhu3 yi4 jie1 ban1 ren2 。

1.4 支持添加自定义字典

若繁体字和简体字互转没有达到预期效果,用户可添加自定义中文字典

若词句转拼音结果没有达到预期效果,用户可添加自定义拼音字典和拼音组合字典

1.4.1 主要接口

public class PinyinHelper {

    /**
     * 用户添加自定义拼音字典
     * 
     * 参数 dict - 添加拼音字典
     * 返回值 Unit
     */
    public static func addPinyinDictResource(dict: HashMap<String, String>): Unit

    /**
     * 用户添加自定义拼音组合字典
     * 
     * 参数 dict - 添加拼音组合字典
     * 返回值 Unit
     */
    public static func addMutilPinyinDictResource(dict: HashMap<String, String>): Unit
}

public class ChineseHelper {

    /**
     * 用户添加自定义中文字典
     * 
     * 参数 dict - 添加中文字典
     * 返回值 Unit
     */
    public static func addChineseDictResource(dict: HashMap<String, String>): Unit
}

1.4.2 示例

自定义拼音字典
import pinyin4cj.*
import std.collection.*

main() {
    let map: HashMap<String, String> = HashMap<String, String>([("上", "shǎng")])
    PinyinHelper.addPinyinDictResource(map)
    var pinyin: String = PinyinHelper.convertToPinyinString("上午", " ", PinyinFormat.WITH_TONE_MARK)
    println(pinyin)
    return 0
}

执行结果如下:

shǎng wǔ
自定义拼音组合字典
import pinyin4cj.*
import std.collection.*

main() {
    let map: HashMap<String, String> = HashMap<String, String>([("阿弥陀佛", "ā,mí,tuó,fó")])
    PinyinHelper.addMutilPinyinDictResource(map)
    var pinyin: String = PinyinHelper.convertToPinyinString("阿弥陀佛", " ", PinyinFormat.WITH_TONE_MARK)
    println(pinyin)
}

执行结果如下:

ā mí tuó fó
自定义中文字典
import pinyin4cj.*
import std.collection.*

main() {
    let map: HashMap<Rune, Rune> = HashMap<Rune, Rune>([(r'癥', r'症')])
    ChineseHelper.addChineseDictResource(map)
    var pinyin: String = ChineseHelper.convertToSimplifiedChinese("癥")
    println(pinyin)
    return 0
}

执行结果如下:

1.5 支持常见多音字转换成拼音

将多音字的转换成拼音集合,集合中包含所有读音

1.5.1 主要接口

public class PinyinHelper {

    /**
     * 常用多音字转换成拼音集合
     * 
     * 参数 c - 字符
     * 参数 format - 输出格式
     * 返回值 Array<String> 
     *   - 若 c 为非汉字字符,返回 []
     */
    public static func convertToPinyinArray(c: Rune, format: PinyinFormat): Array<String>
}

1.5.2 示例

import pinyin4cj.*

main() {
    var pinyin: Array<String> = PinyinHelper.convertToPinyinArray(r'长', PinyinFormat.WITH_TONE_MARK)
    println(pinyin)
    return 0
}

执行结果如下:

["cháng", "zhǎng"]

1.6 支持常用简体/繁体中文字符转换成拼音

获取单个汉字(简体和繁体)的所有指定格式的汉语拼音

1.6.1 主要接口

public class PinyinHelper {

    /**
     * 常用简体或繁体转换成拼音集合
     * 
     * 参数 c - 字符
     * 参数 format - 输出格式
     * 返回值 Array<String>
     *   - 若 c 为非汉字字符,返回 []
     */
    public static func convertToPinyinArray(c: Rune, format: PinyinFormat): Array<String>
}

1.6.2 示例

import pinyin4cj.*

main() {
    var pinyin: Array<String> = PinyinHelper.convertToPinyinArray(r'嚴', PinyinFormat.WITH_TONE_MARK)
    println(pinyin)
    return 0
}

执行结果如下:

["yán"]

1.7 支持常用简体/繁体中文字符转换成通用拼音

获取单个汉字(简体和繁体)的数字音标的通用拼音

1.7.1 主要接口

public class PinyinHelper {

    /**
     * 获取单个汉字(简体和繁体)的数字音标的通用拼音
     * 
     * 参数 char - 字符
     * 返回值 Array<String> 
     *        - 是汉字返回通用拼音
     *        - 不是汉字返回 []
     */
    public static func toTongyongPinyinStringArray(char: Rune): Array<String>
}

1.7.2 示例

import pinyin4cj.*

main() {
    var simplePinyin: Array<String> = PinyinHelper.toTongyongPinyinStringArray(r'傳')
    var traditionalPinyin: Array<String> = PinyinHelper.toTongyongPinyinStringArray(r'传')
    println(simplePinyin)
    println(traditionalPinyin)
    return 0
}

执行结果如下:

["chuan2", "jhuan4"]
["chuan2", "jhuan4"]

2 其他接口

2.1 ChineseHelper

中文转换器

public class ChineseHelper {

    /**
     * 判断字符是否是繁体字
     *
     * 参数 c - 字符
     * 返回值 Bool
     */
    public static func isTraditionalChinese(c: Rune): Bool 

    /**
     * 判断字符是否是汉字
     *
     * 参数 c - 字符
     * 返回值 Bool
     */
    public static func isChinese(c: Rune): Bool

    /**
     * 判断字符串是否包含汉字
     *
     * 参数 str - 字符串
     * 返回值 Bool
     */
    public static func containsChinese(str: String): Bool
}

2.2 PinyinFormat

定义输出汉语拼音格式

格式 结果
WITH_TONE_MARK
WITHOUT_TONE
WITH_TONE_NUMBER lü3
FIRST_LETTER l

public enum PinyinFormat {
    | WITH_TONE_MARK
    | WITHOUT_TONE
    | WITH_TONE_NUMBER
    | FIRST_LETTER

    /*
     * 获取格式名称
     *
     * 返回值 String
     */
    public func getName(): String
}

2.3 PinyinHelper

拼音转换器

public class PinyinHelper {

    /**
     * 获取词句首字母格式的拼音
     *
     * 参数 str - 字符串
     * 返回值 String
     *   - 若 str 为空字符串,抛出异常 Pinyin4cjException - Please enter a word or sentence  
     */
    public static func getShortPinyin(str: String): String

    /**
     * 判断字符是否为多音字
     *
     * 参数 c - 字符
     * 返回值 Bool
     */
    public static func hasMultiPinyin(c: Rune): Bool

}

2.4 Pinyin4cjException

pinyin4cj 异常类

public class Pinyin4cjException <: Exception {
    /**
     * 异常初始化
     */
    public init()

    /**
     * 异常初始化
     *
     * 参数 messages - 异常信息
     */
    public init(messages: String)

    /**
     * 获取异常信息
     *
     * 返回值 String - 异常信息
     */
    public func getMessage(): String

    /**
     * 异常信息转换为 String 类型
     *
     * 返回值 String
     */
    public override func toString(): String
}