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 中使用
65KB
1.5K SLoC
pinyin-parser-rs
解析拼音音节字符串。覆盖边缘情况,如 ẑ
、ŋ
和 ê
。
由于野外拼音字符串不一定符合标准,该解析器提供两种模式:严格和宽松。
严格模式
- 禁止使用短横线代替变音符号来表示第三声
- 禁止使用 IPA
ɡ
(U+0261) 代替g
,以及其他类似的字符 - 仅允许在
a
、e
或o
前使用撇号
示例
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!["yī", "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![
"yī", "diǎn", "r",
"chàng", "gē", "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