Werken met LUIS datetimeV2 entiteiten in botframework v4

stemmen
0

Ik gebruik de Botframework v4 C # met de verzending tool om de resultaten van LUIS & QNA Maker te krijgen. Sommige van mijn LUIS resultaten datetimev2 entiteiten die ik ben niet helemaal zeker hoe goed te verwerken.

Ik zie het opgelost datetime waarde binnen het AdditionalProperties, is er een ingebouwde klasse die ik dit object kan uitbrengen aan? Zijn er monsters die er zijn die uitleggen hoe te werken met entiteiten in het algemeen binnen de botframework v4? Alle documenten met betrekking tot deze nog steeds lijken te zijn voor v3 alleen.

LUIS

De vraag is gesteld op 09/10/2019 om 12:55
bron van user
In andere talen...                            


2 antwoorden

stemmen
1

datetimeV2 is lastig en moest de logica refactoren op basis van input van de gebruiker (er zijn data zonder jaar, relatieve data en ga zo maar door)

De code (JS), die de datum en tijd omgaat is:

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

hasYearcontroleert of het jaar werd ingevoerd door de gebruiker, makeUseOfDateTimeleidt het einde van het jaar (als enige jaar is mogelijk) en leidt einde van de maand (als enige jaar en maand zijn aanwezig)

antwoordde op 09/10/2019 om 14:47
bron van user

stemmen
0

Uiteindelijk heb ik met behulp van dezeLuisResolutionExtensions om DateTime waarden en LUIS entiteiten te extraheren in het algemeen.

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");
}
antwoordde op 15/10/2019 om 17:47
bron van user

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