Получение сущности LUIS DateTime в FormFlow

У меня есть чат-бот на С#, который принимает сообщения пользователей и с помощью LUIS решает, какие намерения у пользователя. Когда определенное намерение найдено, оно запускает FormFlow. Мне удалось успешно заполнить поля в форме из исходного сообщения пользователей, используя объекты LUIS. Однако я застрял в сущности даты и времени. Когда LUIS предоставляет объекты, он отправляет их как 2 отдельных объекта (встроенный.datetime.time и встроенный.datetime.time), но мне нужно, чтобы они сохранялись в одном поле формы (DateTime). Как я могу сохранить время и дату сущности в поле DateTime?

В настоящее время я знаю только, как сохранить только одно поле (сохранить время и по умолчанию сегодняшнюю дату или сохранить дату и по умолчанию 12:00).

Вот как я сейчас сохраняю объект даты в поле формы

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

person Wolfer    schedule 15.08.2016    source источник


Ответы (2)


Вы можете использовать Chronic Parser (он используется в некоторых примерах в официальном исходном коде github botbuilder)

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

Надеюсь, поможет.

person Kien Chu    schedule 16.08.2016
comment
Не удалось найти определение для Parse, должен ли я использовать конкретную директиву? - person Wolfer; 16.08.2016
comment
Вы добавили nChronic в свой проект? и вам нужно проверить импорт тоже - person Kien Chu; 17.08.2016
comment
Я думал, что в шаблоне BotBuilder V3.0 Chronic уже включен в проект. - person Wolfer; 17.08.2016
comment
@Wolfer: я просто хочу подтвердить, пожалуйста, попробуйте var test = new Chronic.Parser().Parse("test");, чтобы увидеть, есть ли у вас ошибка компиляции. - person Kien Chu; 18.08.2016
comment
@Wolfer: вы добавили класс ChronicParserExtension? - person Kien Chu; 19.08.2016
comment
Большое спасибо за помощь, на самом деле мне не нужно было включать функциональность Chronic Parser, поскольку дата и время, которые предоставляет мое приложение LUIS, вводятся в форму, в которую уже встроены функции синтаксического анализа DateTime. - person Wolfer; 23.08.2016
comment
Как это сделать в NodeJS? - person Kosala Nuwan Perera; 04.06.2017
comment
@KosalaNuwanPerera Я не уверен, есть ли у nodejs Chronic - person Kien Chu; 06.06.2017

Большое спасибо @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 });
person Wolfer    schedule 22.08.2016