#拼音 #解析器 #音节 #字符串 #字符 #情况 #严格

pinyin-parser

解析拼音音节字符串。覆盖边缘情况,如 ŋê

10 个版本

0.1.9 2024年1月6日
0.1.8 2024年1月6日
0.1.7 2021年7月2日
0.1.6 2021年6月28日

#270文本处理


match-pinyin-with-hanzi 中使用

MIT 许可协议

65KB
1.5K SLoC

pinyin-parser-rs

解析拼音音节字符串。覆盖边缘情况,如 ŋê

由于野外拼音字符串不一定符合标准,该解析器提供两种模式:严格和宽松。

严格模式

  • 禁止使用短横线代替变音符号来表示第三声
  • 禁止使用 IPA ɡ (U+0261) 代替 g,以及其他类似的字符
  • 仅允许在 aeo 前使用撇号

示例

use pinyin_parser::PinyinParser;
assert_eq!(
    PinyinParser::strict("jīntiān")
        .into_iter()
        .collect::<Vec<_>>(),
    vec!["jīn", "tiān"]
);

生成的字符串是 NFC 标准化(即上面的示例给出单字符 ī U+012B)

儿化音支持。

use pinyin_parser::PinyinParser;
assert_eq!(
      PinyinParser::strict("yīdiǎnr chàng'gēr")
          .collect::<Vec<_>>(),
      vec!["", "diǎnr"]
);

如果您想将 r 与主音节分开,请使用 .split_erhua()
请注意,“er”、“ēr”、“ér”、“ěr” 和 “èr” 这些音节不受此拆分的约束。

use pinyin_parser::PinyinParser;
assert_eq!(
    PinyinParser::strict("yīdiǎnr chànggēr shuāng'ěr língtīng").split_erhua().collect::<Vec<_>>(),
    vec![
        "", "diǎn", "r", 
        "chàng", "", "r", 
        "shuāng", "ěr", 
        "líng", "tīng"
    ]
);

该解析器支持使用 ĉŝŋ,尽管我从未见过有人使用它们。

use pinyin_parser::PinyinParser;
assert_eq!(
    PinyinParser::strict("Ẑāŋ").into_iter().collect::<Vec<_>>(),
    vec!["zhāng"]
)
use pinyin_parser::PinyinParser;
assert_eq!(
    // An apostrophe can come only before an `a`, an `e` or an `o` in strict mode,
    // but allowed here because it's loose    
    PinyinParser::loose("Yīng'guó") 
        .into_iter()
        .collect::<Vec<_>>(),
    vec!["yīng", "guó"]
);

依赖项

~1.5MB
~47K SLoC