pinyin

    MoonBit 拼音转换库 — 汉字→拼音 + 繁简转换 + 多音字 + 声调格式,移植自 pinyin4cj

    pinyin
    chinese
    unicode
    tone
    cangjie
    Download zip
    Author
    Version
    0.1.1
    License
    MIT
    Last updated
    2 hours ago
    Downloads
    33

    No dependencies

    #pinyin

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

    #介绍

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

    #特性

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

    #软件架构

    #源码目录

    . ├── data │ ├── chinese_dict.mbt │ ├── mutil_pinyin_dict.mbt │ ├── pinyin_dict.mbt │ └── tongyong_pinyin_dict.mbt ├── examples │ ├── chinese_helper_example.mbt │ ├── pinyin_helper_example.mbt │ ├── pinyin_array_example.mbt │ └── custom_dict_example.mbt ├── docs │ ├── roadmap.md │ ├── architecture.md │ ├── api.md │ └── testing.md ├── chinese_helper.mbt ├── pinyin_dicts.mbt ├── pinyin_error.mbt ├── pinyin_format.mbt ├── pinyin_helper.mbt ├── tone_conversion.mbt ├── scripts │ └── gen_pinyin_dict.py ├── moon.mod ├── moon.pkg ├── CHANGELOG.md ├── LICENSE ├── README.md └── README.mbt.md

    • data/ 纯数据包,零依赖,存放字典字面量(由生成脚本从源库转写)
    • examples/ 示例包,依赖根包,14 个示例测试覆盖所有公开 API
    • docs/ 开发文档(roadmap / architecture / api / testing)
    • 根目录为库源码包(walkzzz/pinyin),含核心 API 与测试
    • scripts/ 存放字典生成脚本

    #使用说明

    #编译构建

    moon check moon test

    #功能示例

    #繁体转简体

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

    #简体转繁体

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

    #词、句转换成拼音

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

    #自定义输出格式

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

    #多音字转拼音集合

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

    #繁简体转通用拼音

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

    #首字母格式

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

    #多音字检测

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

    #汉字判断

    ///|
    test "readme_is_chinese" {
    inspect(@pinyin.ChineseHelper::is_chinese('中'), content="true")
    inspect(@pinyin.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

    四后端(wasm / wasm-gc / js / native)各 60 测试全通过,严格模式 --warn-list +73 --deny-warn 零警告零错误。

    #开源协议

    本项目基于 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。