Syn Bot /OSCOVA 表达式和实体(6)

表达式用来定义用户输入的模式,要使用表达式,请使用Expression 特性标记装饰 Intent。

一个Intent可以使用多个表达式装饰。

 

 声明表达式可以用下列的符号,表达式中的其他符号将在归一化处理后被删除。

TypeDescription
文字与数字 文本数字混合
连字符(-) 可能是实体名称,因此有效
点(.) 存在于系统实体名称内,有效
&的记号名称(@) 在模板模式(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.
    }
}

 

posted @ 2018-05-24 11:26  道木先生  阅读(143)  评论(0编辑  收藏  举报