将LUIS DateTime实体导入FormFlow

时间:2016-08-15 19:06:34

标签: c# datetime botframework luis formflow

我在C#中有一个聊天机器人,它接收用户消息,并使用LUIS决定用户的意图。找到特定意图后,它将启动FormFlow。我已经能够使用LUIS实体从用户初始消息中成功填写表单中的字段。但是我被困在日期和时间实体上。当LUIS提供实体时,它将它们作为2个独立的实体(builtin.datetime.time& builtin.datetime.time)发送,但我需要将它们保存在一个Form Field(DateTime)下。 如何将实体时间和日期保存到DateTime字段?

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

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

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

2 个答案:

答案 0 :(得分:0)

您可以使用 Chronic Parser (它在官方botbuilder github源代码中的一些示例中使用)

网址:https://github.com/robertwilczynski/nChronic

合并日期和时间整合到一个日期时间实体中,请参阅下面的示例代码

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;
}

希望它有所帮助。

答案 1 :(得分:0)

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

,我很乐意提出意见
<input type="text" name="Name" size="25"
    title="Hier nur Vor- und Nachnamen in dieser Reihenfolge eingeben (bitte ohne Zusatz des Geburtsnamens!)."
    value="Eva Gebhard geb. Zander" 
    onchange="if (Name.value.toUpperCase().search(' GEB[. ]') > -1) {alert('Die Angabe des Geburtsnamens ist nicht erforderlich. Bitte weglassen!'); setFocus(this); return false};" />