Работа с ЛУИС datetimeV2 лиц в botframework v4

голоса
0

Я использую Botframework v4 C # с помощью инструмента отправки, чтобы получить результаты от ЛУИС & QnA Maker. Некоторые из моих результатов LuiS есть datetimev2 объектов, которые я не совсем уверен, как обрабатывать должным образом.

Я вижу , разрешенное значение даты и время внутри AdditionalProperties, есть встроенный класс , который я могу бросить этот объект? Существуют ли какие - либо образцы там , которые объясняют , как работать с юридическими лицами в целом в рамках botframework v4? Все документы , связанные с этим до сих пор , кажется, для v3 только.

ЛУИС

Задан 09/10/2019 в 12:55
источник пользователем
На других языках...                            


2 ответов

голоса
1

datetimeV2 это сложно, и пришлось реорганизовать логику на основе пользовательского ввода (есть даты без года, относительно даты и так далее)

Код (JS), который обрабатывает DateTime является:

const datetime = _.get(
          luisQuery.entities.filter(e => e.type && e.type.includes("builtin.datetimeV2")), 
          '[0].resolution.values[0].timex', 
          null);

const hasYear = (datetime) => {
    return !datetime.includes("XXXX");
};

const makeUseOfDateTime = (datetime) => {
    if (datetime.length === 4) {
        datetime += "-12-31";
    } else if (datetime.length === 7) {
        datetime += "-31";
    }

    // do something with datetime
};

hasYearпроверяет , является ли год был введен пользователем, makeUseOfDateTimeвыводит конец года (если только год предусмотрено) и выводит конец месяца (если только год и месяц , предоставляются)

Ответил 09/10/2019 в 14:47
источник пользователем

голоса
0

Я в конечном итоге с помощью этихLuisResolutionExtensions извлечь значения DateTime и Луис объекты в целом.

public static DateTime ProcessDateTimeV2Date(this EntityModel entity)
{
    if (entity.AdditionalProperties.TryGetValue("resolution", out dynamic resolution))
    {
        var resolutionValues = (IEnumerable<dynamic>) resolution.values;
        var datetimes = resolutionValues.Select(val => DateTime.Parse(val.value.Value));

        if (datetimes.Count() > 1)
        {
            // assume the date is in the next 7 days
            var bestGuess = datetimes.Single(dateTime => dateTime > DateTime.Now && (DateTime.Now - dateTime).Days <= 7);
            return bestGuess;
        }

        return datetimes.FirstOrDefault();
    }

    throw new Exception("ProcessDateTimeV2DateTime");
}

public static string ProcessRoom(this EntityModel entity)
{
    if (entity.AdditionalProperties.TryGetValue("resolution", out dynamic resolution))
    {
        var resolutionValues = (IEnumerable<dynamic>) resolution.values;
        return resolutionValues.Select(room => room).FirstOrDefault();
    }

    throw new Exception("ProcessRoom");
}
Ответил 15/10/2019 в 17:47
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more