仓颉pinyin4cj中文转拼音技巧详解,如何快速实现拼音转换?
一、前言:
在汉字学习、文本处理和自然语言处理领域,汉字转拼音是一项非常实用的技术,特别是在语言处理、信息检索和语言学习中,极大地提升了工作效率。特别是当开发涉及中文文本处理的应用时,如拼音排序、拼音检索或语言处理系统。
在开发互联网应用程序时,处理中文字符的拼音转换对于语音识别、搜索优化和用户界面友好性至关重要。例如,在搜索引擎中实现拼音搜索、生成拼音缩写、或者对中文内容进行拼音排序等。在我们实际的开发过程中,经常会遇到需要将中文字符串转换为拼音的需求。通过将汉字转换为拼音,开发者可以简化很多处理步骤,尤其在拼音排序、发音分析、跨语言支持等应用中显得尤为重要。仓颉中可以使用pinyin4cj 是一个支持将汉字转换成拼音的三方库,输出的拼音格式可以自定义设置。
二、应用场景
-
- 搜索引擎优化
- 拼音搜索:用户输入拼音可匹配中文内容,提升搜索准确性 。
- 拼音索引:数据库中为中文字段添加拼音字段,加速检索效率 。
-
- 数据处理与排序
- 拼音排序:按拼音字母顺序对中文内容排序,如通讯录或字典 。
- 拼音缩写:生成中文首字母缩写,用于快速分类或检索 。
-
- 语音识别与输入法
- 语音输入:将语音转为拼音后匹配汉字,提升识别准确率 。
- 输入法辅助:拼音输入法的核心技术,支持自动补全和纠错 。
三、仓颉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 | lǚ |
| WITHOUT_TONE | lü |
| 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:运行测试成功
新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。
更多推荐


所有评论(0)