5个版本
0.1.4 | 2024年3月25日 |
---|---|
0.1.3 | 2024年3月2日 |
0.1.2 | 2024年2月6日 |
0.1.1 | 2024年2月4日 |
0.1.0 | 2024年1月25日 |
#1230 在 编码
用在 jbonsai
83KB
2K SLoC
jlabel-question
htsvoice全文标签问题的解析器和匹配器。
注意: serde
的支持是实验性的。更改可能不会被当作破坏性更改处理。
使用
在 Cargo.toml 中添加以下内容
[dependencies]
jlabel-question = "0.1.4"
版权
测试目录中的 question.hed
文件来自 Nitech日本语音数据库 "NIT ATR503 M001" 。
- 创用共享许可 3.0
- 版权 (c) 2003-2015 名古屋工业大学 计算机科学系
许可
BSD-3-Clause
API参考
lib.rs
:
HTS风格的全文标签问题解析器和匹配器。
解析和匹配的主要结构是 AllQuestion
。它可以解析大多数模式,但不能解析其中一些。有关详细信息,请参阅 将解析作为AllQuestion的条件。
use jlabel::Label;
use jlabel_question::{AllQuestion, QuestionMatcher};
use std::str::FromStr;
let question = AllQuestion::parse(&["*/A:-??+*", "*/A:-?+*"])?;
let label_str = concat!(
"sil^n-i+h=o",
"/A:-3+1+7",
"/B:xx-xx_xx",
"/C:02_xx+xx",
"/D:02+xx_xx",
"/E:xx_xx!xx_xx-xx",
"/F:7_4#0_xx@1_3|1_12",
"/G:4_4%0_xx_1",
"/H:xx_xx",
"/I:3-12@1+2&1-8|1+41",
"/J:5_29",
"/K:2+8-41"
);
assert!(question.test(&label_str.parse()?));
#
将解析作为 AllQuestion
的条件
以下是模式成功解析为 AllQuestion
所必需的条件,但即使满足这些要求,某些问题也可能无法成功解析。
- 模式必须是有效的htsvoice问题模式。
- 使用
*
和?
作为通配符,匹配整个全文标签。 - 在任何情况下都无法匹配全文标签的模式(例如
*/A:-?????+*
)是不允许的。 - 数值字段中的减号 (
-
) 只能在A
的第一个元素 (A1
) 中使用。
- 使用
- 所有模式都必须关于相同的位置
- 例如,第一个模式关于音素的第一元素,第二个模式关于字段
J
的最后一个元素,是不允许的。
- 例如,第一个模式关于音素的第一元素,第二个模式关于字段
- 每个模式不得在两个或多个位置上有条件。
- 当模式涉及数值字段的位数(不包括如
B
、C
或D
这样的分类字段)时,- 模式必须是连续的。
后备
由于 AllQuestion
解析不一定总是成功(即使模式正确),你可能需要为该模式编写后备。
如果你只想忽略这些模式,你可以简单地返回 false
而不是 test()
的结果。
如果你需要成功解析 AllQuestion
解析失败的模式,regex::RegexQuestion
是最佳选择。
use jlabel::Label;
use jlabel_question::{regex::RegexQuestion, AllQuestion, ParseError, QuestionMatcher};
enum Pattern {
AllQustion(AllQuestion),
Regex(RegexQuestion),
}
impl Pattern {
fn parse(patterns: &[&str]) -> Result<Self, ParseError> {
match AllQuestion::parse(patterns) {
Ok(question) => Ok(Self::AllQustion(question)),
Err(_) => Ok(Self::Regex(RegexQuestion::parse(patterns)?)),
}
}
fn test(&self, label: &Label) -> bool {
match self {
Self::AllQustion(question) => question.test(label),
Self::Regex(question) => question.test(label),
}
}
}
依赖关系
~0.3–1.5MB
~32K SLoC