Syn Bot /OSCOVA 表达式和实体(6)
表达式用来定义用户输入的模式,要使用表达式,请使用Expression
特性标记装饰 Intent。
一个Intent可以使用多个表达式装饰。
声明表达式可以用下列的符号,表达式中的其他符号将在归一化处理后被删除。
Type | Description |
---|---|
文字与数字 | 文本数字混合 |
连字符(-) | 可能是实体名称,因此有效 |
点(.) | 存在于系统实体名称内,有效 |
&的记号名称(@) | 在模板模式(template mode)当作前缀显式使用 |
花括号({}) | 显式使用用于注解实体的值 |
实体
实体是开发人员想要从用户消息中解析的信息片段。关于如何自定义实体识别器请查看《Syn Bot /OSCOVA实体识别器》一节。
实体类型的命名方式:@EntityTypeName,举例
[Expression("Add a reminder for @sys.date")]
public void ReminderStart(Context context, Result result)
{
//Do something
}
实体表达式的类型有两类,一类是使用花括号
[Expression("{open} the garage door")]
[Expression("{close} the garage door")]
[Entity("command")]
如果类型为command的实体类型不是已有,他的识别器将会被框架动态创建。
另一类是使用模板(Template),通过代码创建的方式如下:
bot.CreateRecognizer("command", new[] {"open", "close"});
怎么使用呢?
[Expression("@command the garage door")]
需要注意的是,实体类型名称只能包含文字和数字字符,可以使用点和短横线分隔。其他字符是无效的。
@符号也只用于指定实体类型,别的地方使用就不带@,比如
Entities.OfType("sys.currency");
系统预定义了很多实体识别器,要使用系统的实体,从Sys下面查找。
[Expression("Book an appointment for {tomorrow}")]
[Entity(Sys.Date)]
public void Appointment(Context context, Result result)
{
//Do Something.
}
为表达式命名,注意必须是上下文唯一的。
[Expression("open @app", Name = "single-app")]
[Expression("open @app and @app", Name = "multi-app")]
public void OpenApp(Context context, Result result)
{
if (result.CurrentIntent.ExpressionName == "single-app")
{
//Do something here.
}
else if (result.CurrentIntent.ExpressionName == "multi-app")
{
//Do something here.
}
}