将LUIS DateTime实体放入FormFlow

本文关键字:FormFlow 实体 LUIS DateTime | 更新日期: 2023-09-27 18:02:25

我在c#中有一个聊天机器人,它接受用户的消息,并使用LUIS来决定用户的意图。当一个特定的意图被发现时,它会启动一个FormFlow。我已经能够使用LUIS实体成功地从用户初始消息中填充表单中的字段。然而,我被困在日期和时间实体。当LUIS提供实体时,它将它们作为2个单独的实体(built .datetime. datetime)发送。时间,build . DateTime .time),但我需要这些保存在一个表单字段(DateTime)。我怎么能有实体时间和日期得到保存到DateTime字段?

我目前只知道如何保存只有一个字段(保存时间和默认为今天的日期,或保存日期和默认为12AM)。

这是我目前如何保存日期实体到我的表单字段

        EntityRecommendation entityDateTime;
        result.TryFindEntity("builtin.datetime.date", out entityDateTime);
        if (entityDateTime != null)
            entities.Add(new EntityRecommendation(type: "DateTime") { Entity = entityDateTime.Entity });

将LUIS DateTime实体放入FormFlow

您可以使用慢性解析器(它在官方botbuilder github源代码中的一些示例中使用)

的URL: https://github.com/robertwilczynski/nChronic

将日期和时间合并为一个datetime实体,请参见下面的示例代码

EntityRecommendation time;
EntityRecommendation date;
var timeFound = result.TryFindEntity(EntityConstant.EntityBuiltInTime, out time);
if (result.TryFindEntity(EntityConstant.EntityBuiltInDate, out date))
{
    return timeFound ? (date.Entity + " " + time.Entity).Parse() : date.Entity.Parse();
}

ChronicParserExtension.cs

public static Tuple<DateTime, DateTime> Parse(this string input)
{
    var parser = new Parser(new Options
    {
        FirstDayOfWeek = DayOfWeek.Monday
    });
    var span = parser.Parse(input);
    if (span.Start != null && span.End != null)
    {
        return Tuple.Create(span.Start.Value, span.End.Value);        
    }
    return null;
}

希望能有所帮助。

非常感谢@kienct89,因为他帮助我解决了问题,但是我不需要使用Chronic。我用下面的代码得到了我想要的结果,如果有更好的方法来写这个

,我很高兴输入注释。
        EntityRecommendation entityDate;
        EntityRecommendation entityTime;
        result.TryFindEntity("builtin.datetime.date", out entityDate);
        result.TryFindEntity("builtin.datetime.time", out entityTime);
        if ((entityDate != null) & (entityTime != null))
            entities.Add(new EntityRecommendation(type: "DateTime") { Entity = entityDate.Entity + " " + entityTime.Entity });
        else if (entityDate != null)
            entities.Add(new EntityRecommendation(type: "DateTime") { Entity = entityDate.Entity });
        else if (entityTime != null)
            entities.Add(new EntityRecommendation(type: "DateTime") { Entity = entityTime.Entity });