Lucrul cu entități LUIS datetimeV2 în v4 botframework

voturi
0

Sunt folosind Botframework v4 C # cu instrumentul de expediere pentru a obține rezultate de la LUIS & QnA Maker. Unele dintre rezultatele mele au LUIS entități datetimev2 care nu sunt destul de sigur cum să proceseze corect.

Văd valoarea datetime rezolvată în interiorul AdditionalProperties, există o clasă de built-in care pot arunca acest obiect? Există probe acolo , care explică modul în care să lucreze cu entități , în general , în cadrul V4 botframework? Toate documentele legate de acest par a fi încă pentru v3 numai.

LUIS

Întrebat 09/10/2019 la 11:55
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
1

datetimeV2 este dificil și a trebuit să refactor logica bazată pe datele introduse de utilizator (există date fără an, datele relative și așa mai departe)

Codul (JS), care se ocupă de ora si data este:

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

hasYearverifică dacă anul a fost introdus de către utilizator, makeUseOfDateTimededuce la sfârșitul anului ( în cazul în care numai anul furnizat) și intuiește sfârșitul lunii ( în cazul în care numai an și lună sunt furnizate)

Publicat 09/10/2019 la 13:47
sursa de către utilizator

voturi
0

Am ajuns folosind acesteLuisResolutionExtensions pentru a extrage valori DateTime și entități LUIS în general.

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");
}
Publicat 15/10/2019 la 16:47
sursa de către utilizator

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