pinyin

MoonBit port of pinyin4cj: Chinese-to-pinyin conversion

pinyin
chinese
unicode
moon add walkzzz/pinyin@0.1.0
Download zip
Author
Version
0.1.0
License
MIT
Last updated
2 days ago
Downloads
2
README

#介绍

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

#特性

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

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

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

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

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

  • 🚀 支持添加自定义字典

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

#软件架构

#源码目录

. ├── src │ ├── data │ │ ├── chinese_dict.mbt # 繁→简码点映射(2533 条) │ │ ├── mutil_pinyin_dict.mbt # 词组拼音(843 条) │ │ ├── pinyin_dict.mbt # 单字拼音(20903 条) │ │ └── tongyong_pinyin_dict.mbt # 通用拼音(82 条) │ ├── examples # 功能示例 │ │ ├── chinese_helper_example.mbt │ │ ├── pinyin_helper_example.mbt │ │ ├── pinyin_array_example.mbt │ │ └── custom_dict_example.mbt │ ├── chinese_helper.mbt # ChineseHelper:繁简转换、汉字判断 │ ├── pinyin_dicts.mbt # 四张字典视图常量 │ ├── pinyin_error.mbt # PinyinError 错误类型 │ ├── pinyin_format.mbt # PinyinFormat 格式枚举 │ ├── pinyin_helper.mbt # PinyinHelper:拼音转换核心 API │ └── tone_conversion.mbt # 声调转换内部逻辑 ├── doc │ └── feature_api.md # API 文档 ├── scripts │ └── gen_pinyin_dict.py # 字典生成脚本 ├── moon.mod # 模块元数据 ├── CHANGELOG.md # 变更日志 ├── LICENSE # MIT 协议 └── README.md

  • src/data 存放字典字面量(由生成脚本从源库转写)
  • src/examples 存放功能示例(对应 README 中的 10 个示例)
  • src 是库源码目录
  • doc 存放库的特性文档
  • scripts 存放字典生成脚本

#接口说明

方法说明
PinyinHelperconvert_to_pinyin_string词句转拼音字符串
PinyinHelperconvert_to_pinyin_string_traditional繁体词句转拼音
PinyinHelperconvert_to_pinyin_array单字转拼音数组
PinyinHelperget_short_pinyin首字母格式拼音
PinyinHelperhas_multi_pinyin多音字检测
PinyinHelperto_tongyong_pinyin_string_array通用拼音数组
PinyinHelperadd_pinyin_dict_resource添加自定义拼音字典
PinyinHelperadd_mutil_pinyin_dict_resource添加自定义词组字典
ChineseHelperconvert_to_simplified_chinese繁体转简体
ChineseHelperconvert_to_traditional_chinese简体转繁体
ChineseHelperis_chinese汉字判断
ChineseHelperis_traditional_chinese繁体汉字判断
ChineseHelpercontains_chinese包含汉字判断
ChineseHelperadd_chinese_dict_resource添加自定义中文字典

#使用说明

#编译构建

moon check # 类型检查 moon test # 运行测试 moon fmt # 格式化 moon info # 生成接口文件

#功能示例

#繁体转简体

let pinyin = ChineseHelper::convert_to_simplified_chinese("臺,喪,麗")
println(pinyin)
// 输出: 台,丧,丽

#简体转繁体

let pinyin = ChineseHelper::convert_to_traditional_chinese("我是中国人")
println(pinyin)
// 输出: 我是中國人

#词、句转换成拼音

let pinyin = PinyinHelper::convert_to_pinyin_string("我是中国人", " ")
println(pinyin)
// 输出: wǒ shì zhōng zhòng guó rén

#自定义输出格式

let pinyin = PinyinHelper::convert_to_pinyin_string("中国", " ", format=PinyinFormat::WithToneNumber)
println(pinyin)
// 输出: zhong1 zhong4 guo2

#添加自定义拼音字典

let map : Map[String, String] = { "上": "shǎng" }
PinyinHelper::add_pinyin_dict_resource(map)
let pinyin = PinyinHelper::convert_to_pinyin_string("上午", " ")
println(pinyin)
// 输出: shǎng wǔ

#添加自定义拼音组合字典

let map : Map[String, String] = { "阿弥陀佛": "ā,mí,tuó,fó" }
PinyinHelper::add_mutil_pinyin_dict_resource(map)
let pinyin = PinyinHelper::convert_to_pinyin_string("阿弥陀佛", " ")
println(pinyin)
// 输出: ā mí tuó fó

#添加自定义中文字典

let map : Map[Int, Int] = { 0x7691: 0x75C7 } // 癥 → 症
ChineseHelper::add_chinese_dict_resource(map)
let pinyin = ChineseHelper::convert_to_simplified_chinese("癥")
println(pinyin)
// 输出: 症

#多音字转拼音集合

let pinyin = PinyinHelper::convert_to_pinyin_array('长')
println(pinyin)
// 输出: ["cháng", "zhǎng"]

#繁简体转拼音

let pinyin = PinyinHelper::convert_to_pinyin_array('嚴')
println(pinyin)
// 输出: ["yán"]

#繁简体转通用拼音

let simplePinyin = PinyinHelper::to_tongyong_pinyin_string_array('傳')
let traditionalPinyin = PinyinHelper::to_tongyong_pinyin_string_array('传')
println(simplePinyin)
println(traditionalPinyin)
// 输出: ["chuan2", "jhuan4"]
// ["chuan2", "jhuan4"]

#字典条目数

字典条目数类型源库对应
chinese_map2533Map[Int, Int]CHINESE_MAP
pinyin_table20903Map[String, String]PINYIN_TABLE
mutil_pinyin_table843Map[String, String]MUTIL_PINYIN_TABLE
tongyong_pinyin_table82Map[String, String]TONGYONG_PINYIN_TABLE

#字典生成

字典字面量由 scripts/gen_pinyin_dict.py 从源库 pinyin4cj 生成:

python scripts/gen_pinyin_dict.py

#约束与限制

在下述版本验证通过:

编号依赖构建工具版本号
1moon0.1.20260713

#移植说明

本项目移植自 Cangjie 库 pinyin4cj

内容
原项目名称pinyin4cj
原项目链接https://gitcode.com/pinyin4cj/pinyin4cj
原项目语言Cangjie(仓颉)
原项目许可证MIT
移植范围pinyin_helper + chinese_helper 全部 API,完整移植
修改适配camelCase→snake_case、异常改用 raise、字典内嵌为字面量、src/ 布局
未支持功能无(完整移植)

#开源协议

本项目基于 MIT License,请自由的享受和参与开源。

#参与贡献

欢迎给我们提交PR,欢迎给我们提交Issue,欢迎参与任何形式的贡献。

#pinyin

MoonBit port of pinyin4cj: Chinese-to-pinyin conversion.

#介绍

pinyin 是一个支持将汉字转换成拼音的库,输出的拼音格式可以自定义设置。移植自 Cangjie 库 pinyin4cj

#特性

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

#软件架构

#源码目录

. ├── src │ ├── data │ │ ├── chinese_dict.mbt │ │ ├── mutil_pinyin_dict.mbt │ │ ├── pinyin_dict.mbt │ │ └── tongyong_pinyin_dict.mbt │ ├── chinese_helper.mbt │ ├── pinyin_dicts.mbt │ ├── pinyin_error.mbt │ ├── pinyin_format.mbt │ ├── pinyin_helper.mbt │ └── tone_conversion.mbt ├── doc │ └── feature_api.md ├── scripts │ └── gen_pinyin_dict.py ├── moon.mod ├── CHANGELOG.md ├── LICENSE └── README.md

  • src/data 存放字典字面量(由生成脚本从源库 resource/pinyin.dict.txt 转写)
  • src 是库源码目录
  • doc 存放库的特性文档
  • scripts 存放字典生成脚本

#使用说明

#编译构建

moon check moon test

#功能示例

#繁体转简体

///|
test "readme_convert_to_simplified" {
inspect(
ChineseHelper::convert_to_simplified_chinese("臺,喪,麗"),
content="台,丧,丽",
)
}

#简体转繁体

///|
test "readme_convert_to_traditional" {
inspect(
ChineseHelper::convert_to_traditional_chinese("我是中国人"),
content="我是中國人",
)
}

#词、句转换成拼音

///|
test "readme_convert_to_pinyin_string" {
inspect(
PinyinHelper::convert_to_pinyin_string("我是中国人", " "),
content="wǒ shì zhōng zhòng guó rén",
)
}

#自定义输出格式

///|
test "readme_with_tone_number" {
inspect(
PinyinHelper::convert_to_pinyin_string(
"中国",
" ",
format=PinyinFormat::WithToneNumber,
),
content="zhong1 zhong4 guo2",
)
}

#多音字转拼音集合

///|
test "readme_convert_to_pinyin_array" {
debug_inspect(
PinyinHelper::convert_to_pinyin_array('长'),
content="[\"cháng\", \"zhǎng\"]",
)
}

#繁简体转通用拼音

///|
test "readme_tongyong_pinyin" {
debug_inspect(
PinyinHelper::to_tongyong_pinyin_string_array('传'),
content="[\"chuan2\", \"jhuan4\"]",
)
}

#首字母格式

///|
test "readme_get_short_pinyin" {
inspect(PinyinHelper::get_short_pinyin("中国"), content="z z g")
}

#多音字检测

///|
test "readme_has_multi_pinyin" {
inspect(PinyinHelper::has_multi_pinyin('中'), content="true")
}

#汉字判断

///|
test "readme_is_chinese" {
inspect(ChineseHelper::is_chinese('中'), content="true")
inspect(ChineseHelper::contains_chinese("abc中"), content="true")
}

#字典条目数

字典条目数类型源库对应
chinese_map2533Map[Int, Int]CHINESE_MAP
pinyin_table20903Map[String, String]PINYIN_TABLE
mutil_pinyin_table843Map[String, String]MUTIL_PINYIN_TABLE
tongyong_pinyin_table82Map[String, String]TONGYONG_PINYIN_TABLE

#字典生成

字典字面量由 scripts/gen_pinyin_dict.py 从源库 pinyin4cj 生成:

python scripts/gen_pinyin_dict.py

#约束与限制

在下述版本验证通过:

编号依赖构建工具版本号
1moon0.1.20260713

#开源协议

本项目基于 MIT License,请自由的享受和参与开源。

#
PinyinError

pub(all) suberror PinyinError {
PinyinError(String)
}

拼音库统一错误类型,对齐源库 pinyin4cj 的 Pinyin4cjException。 单变体携带错误消息字符串,后续方法以 raise PinyinError("msg") 抛错, 调用方以 try expr catch { PinyinError::PinyinError(msg) => ... } 捕获。

#
ChineseHelper

pub struct ChineseHelper {
}

ChineseHelper 命名空间类型,对齐源库 ChineseHelper。所有方法为类型关联方法。

#
ChineseHelper::add_chinese_dict_resource

fn ChineseHelper::add_chinese_dict_resource(dict : Map[Int, Int]) -> Unit

追加自定义繁简映射到 chinese_map(原地合并,键冲突新值覆盖)。 对齐源库 ChineseHelper.addChineseDictResource。

#
ChineseHelper::contains_chinese

fn ChineseHelper::contains_chinese(str : String) -> Bool

判断字符串是否包含汉字。对齐源库 ChineseHelper.containsChinese。

#
ChineseHelper::convert_to_simplified_chinese

fn ChineseHelper::convert_to_simplified_chinese(str : String) -> String

繁→简转换:逐字符查 chinese_map,命中替换为简体码点,未命中原样。空串返回空串。 对齐源库 ChineseHelper.convertToSimplifiedChinese。

#
ChineseHelper::convert_to_traditional_chinese

fn ChineseHelper::convert_to_traditional_chinese(str : String) -> String

简→繁转换:逐字符遍历 chinese_map 反查值为该字符的键,命中替换为键,未命中原样。 保留 O(n) 反查语义(需求 3.8 不主动优化,避免改变多映射语义)。 对齐源库 ChineseHelper.convertToTraditionalChinese。

#
ChineseHelper::is_chinese

fn ChineseHelper::is_chinese(c : Char) -> Bool

判断字符是否为汉字(CJK 统一表意文字 U+4E00-U+9FFF 或汉字零 U+3007)。 对齐源库 ChineseHelper.isChinese。

#
ChineseHelper::is_traditional_chinese

fn ChineseHelper::is_traditional_chinese(c : Char) -> Bool

判断字符是否为繁体汉字(在 chinese_map 中存在映射)。 对齐源库 ChineseHelper.isTraditionalChinese。

#
PinyinFormat

pub(all) enum PinyinFormat {
WithToneMark
WithoutTone
WithToneNumber
FirstLetter
}

拼音输出格式枚举,对齐源库 pinyin4cj 的 PinyinFormat。 4 个变体分别对应:带声调标记 / 不带声调 / 带声调数字 / 首字母。

#
PinyinFormat::name

fn PinyinFormat::name(self : PinyinFormat) -> String

返回格式名称字符串(大写下划线形式),逐字符对齐源库 getName()。

#
PinyinHelper

pub struct PinyinHelper {
}

PinyinHelper 命名空间类型,对齐源库 PinyinHelper。所有方法为类型关联方法。

#
PinyinHelper::add_mutil_pinyin_dict_resource

fn PinyinHelper::add_mutil_pinyin_dict_resource(dict : Map[String, String]) -> Unit

追加自定义词组拼音字典到 mutil_pinyin_table(原地合并)。 对齐源库 addMutilPinyinDictResource。

#
PinyinHelper::add_pinyin_dict_resource

fn PinyinHelper::add_pinyin_dict_resource(dict : Map[String, String]) -> Unit

追加自定义单字拼音字典到 pinyin_table(原地合并)。 对齐源库 addPinyinDictResource。

#
PinyinHelper::convert_to_pinyin_array

fn PinyinHelper::convert_to_pinyin_array(c : Char, format? : PinyinFormat) -> Array[String]

单字所有读音数组。对齐源库 convertToPinyinArray。非汉字返回 []。

#
PinyinHelper::convert_to_pinyin_string

fn PinyinHelper::convert_to_pinyin_string(str : String, separator : String, format? : PinyinFormat) -> String raise PinyinError

词句转拼音(默认 WithToneMark 格式)。对齐源库 convertToPinyinString(str, sep)。

#
PinyinHelper::convert_to_pinyin_string_traditional

fn PinyinHelper::convert_to_pinyin_string_traditional(str : String, separator : String, format? : PinyinFormat) -> String raise PinyinError

先繁→简再转拼音。对齐源库 convertToPinyinStringTraditional。

#
PinyinHelper::get_short_pinyin

fn PinyinHelper::get_short_pinyin(str : String) -> String raise PinyinError

首字母格式拼音。对齐源库 getShortPinyin。空串抛 PinyinError。

#
PinyinHelper::has_multi_pinyin

fn PinyinHelper::has_multi_pinyin(c : Char) -> Bool raise PinyinError

判断是否多音字。对齐源库 hasMultiPinyin。非汉字抛 PinyinError。

#
PinyinHelper::to_tongyong_pinyin_string_array

fn PinyinHelper::to_tongyong_pinyin_string_array(char : Char) -> Array[String]

通用拼音数组。对齐源库 toTongyongPinyinStringArray。非汉字返回 []。

#
chinese_map

let chinese_map : Map[Int, Int]

繁体→简体汉字码点映射,2533 条,对应源库 CHINESE_MAP。

#
convert_to_pinyin_arrays

fn convert_to_pinyin_arrays(c : Char, format : PinyinFormat) -> Array[String]

单字转拼音数组(查 pinyin_table,不区分首字母特殊处理)。对齐源库 convertToPinyinArrays。

#
convert_with_tone_number

fn convert_with_tone_number(str : String) -> Array[String]

带调拼音→数字调拼音数组。对齐源库 convertWithToneNumber。 每音节仅处理首个带调元音,未找到带调元音则追加 "5"(轻声)。ü 替换为 v。

#
convert_without_tone

fn convert_without_tone(str : String) -> Array[String]

带调拼音→无调拼音数组。对齐源库 convertWithoutTone。 逐字符替换所有带调元音为对应无调元音,最后 ü 替换为 v。

#
find_array_key_by_value

fn find_array_key_by_value(ch : Char) -> Int

在带调元音数组中查找字符索引,未找到返回 -1。对齐源库 findArrayKeyByValue。

#
format_pinyin

fn format_pinyin(str : String, format : PinyinFormat) -> Array[String]

按 PinyinFormat 分发格式转换。对齐源库 formatPinyin。 用 match 模式匹配(技术方案推荐,比源库字符串比较更地道)。

#
mutil_pinyin_table

let mutil_pinyin_table : Map[String, String]

词组拼音映射,843 条,对应源库 MUTIL_PINYIN_TABLE。

#
pinyin_separator

let pinyin_separator : String

拼音分隔符,对齐源库 PINYIN_SEPARATOR。pub let 跨文件共享。

#
pinyin_table

let pinyin_table : Map[String, String]

单字拼音映射,20903 条,对应源库 PINYIN_TABLE。

#
tongyong_pinyin_table

let tongyong_pinyin_table : Map[String, String]

通用拼音映射,82 条,对应源库 TONGYONG_PINYIN_TABLE。