一、前言:

在汉字学习、文本处理和自然语言处理领域,汉字转拼音是一项非常实用的技术,特别是在语言处理、信息检索和语言学习中,极大地提升了工作效率。特别是当开发涉及中文文本处理的应用时,如拼音排序、拼音检索或语言处理系统。

在开发互联网应用程序时,处理中文字符的拼音转换对于语音识别、搜索优化和用户界面友好性至关重要。例如,在搜索引擎中实现拼音搜索、生成拼音缩写、或者对中文内容进行拼音排序等。在我们实际的开发过程中,经常会遇到需要将中文字符串转换为拼音的需求。通过将汉字转换为拼音,开发者可以简化很多处理步骤,尤其在拼音排序、发音分析、跨语言支持等应用中显得尤为重要。仓颉中可以使用pinyin4cj 是一个支持将汉字转换成拼音的三方库,输出的拼音格式可以自定义设置。


二、应用场景

    1. 搜索引擎优化
    • 拼音搜索:用户输入拼音可匹配中文内容,提升搜索准确性 。 ‌
    • 拼音索引:数据库中为中文字段添加拼音字段,加速检索效率 。 ‌
    1. 数据处理与排序
    • 拼音排序:按拼音字母顺序对中文内容排序,如通讯录或字典 。 ‌
    • 拼音缩写:生成中文首字母缩写,用于快速分类或检索 。 ‌
    1. 语音识别与输入法
    • 语音输入:将语音转为拼音后匹配汉字,提升识别准确率 。 ‌
    • 输入法辅助:拼音输入法的核心技术,支持自动补全和纠错 。 ‌

三、仓颉pinyin4cj介绍

pinyin4cj 是一个支持将汉字转换成拼音的三方库,输出的拼音格式可以自定义设置。在词库中包含文字才能转换,字符 ü、声调符号、首字母只对汉语拼音有效

特性

  • 🚀 支持词、句转换成拼音

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

  • 🛠️ 支持常见多音字符转换成拼音

  • 🌍 支持Unicode格式的字符ü、支持声调符号、支持首字母格式

  • 💪 支持常用简体、繁体中文字符互转

  • 🚀 支持添加自定义字典

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

软件架构

请添加图片描述

源码目录

.
├── doc
├── resource
├── ├── pinyin.dict.txt
├── src
│   ├── chinese_helper.cj
│   ├── chinese_dict.cj
│   ├── get_file_path.cj
│   ├── import.cj
│   ├── mutil_pinyin.dict.cj
│   ├── pinyin_format.cj
│   ├── pinyin_helper.cj
│   ├── pinyin_resource.cj
│   ├── tongyong_pinyin_dict.cj
└── test
│   ├── HLT
│   ├── LLT
│   └── UT
├── CHANGELOG.md
├── gitee_gate.cfg
├── LICENSE.txt
├── module.json
├── pinyin4cj_build.bat
├── pinyin4cj_build.sh
├── README.md
└── README.OpenSource
  • doc 存放库的特性文档
  • resource 存放拼音字典
  • src 是库源码目录
  • test 存放 HLT 测试用例、LLT 自测用例和 UT 单元测试用例

cjpm.toml:

[dependencies]

[package]
  cjc-version = "1.0.0"
  compile-option = "-O2"
  description = ""
  link-option = ""
  name = "pinyin4cj"
  output-type = "dynamic"
  src-dir = "src"
  target-dir = ""
  version = "1.0.4"
  package-configuration = {}
  scripts = {}

四、功能示例

繁体转简体

示例代码如下:

import pinyin4cj.*

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

执行结果如下:

台,丧,丽
简体转繁体

示例代码如下:

import pinyin4cj.*

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

执行结果如下:

我是中國人
词、句转换成拼音

示例代码如下:

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 。
自定义输出格式

示例代码如下:

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 。
添加自定义拼音字典

示例代码如下:

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
}

执行结果如下:

多音字转拼音集合

示例代码如下:

import pinyin4cj.*

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

执行结果如下:

["cháng", "zhǎng"]
繁简体转拼音

示例代码如下:

import pinyin4cj.*

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

执行结果如下:

["yán"]
繁简体转通用拼音

示例代码如下:

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"]

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
}

语言版本和环境:

在这里插入图片描述
以下为本次测试的语言版本和环境:

- **仓颉语言版本**: 1.0.3+

- **使用场景**: 鸿蒙应用开发

- windows:运行测试成功
Logo

新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐