Travailler avec des entités LUIS datetimeV2 dans botframework v4

voix
0

J'utilise le Botframework v4 C # avec l'outil d'expédition pour obtenir des résultats de Maker LUIS & QnA. Certains de mes résultats ont LUIS entités datetimev2 que je ne suis pas tout à fait sûr de savoir comment traiter correctement.

Je vois la valeur datetime résolue à l' intérieur du AdditionalProperties, est - il une classe intégrée qui je peux jeter cet objet? Y a-t- il des échantillons là - bas qui expliquent comment travailler avec des entités en général au sein de la botframework v4? Tous les documents liés à cette semblent encore v3 uniquement.

LUIS

Créé 09/10/2019 à 12:55
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

datetimeV2 est délicate et a dû remanier la logique basée sur l'entrée d'utilisateur (il y a des dates sans année, les dates relatives et ainsi de suite)

Le code (JS) qui gère la date-heure est la suivante:

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

hasYearvérifie si l'année a été introduite par l'utilisateur, makeUseOfDateTimeinfère la fin de l' année (si seule année fourni) et infère fin du mois (si sont fournis uniquement année et mois)

Créé 09/10/2019 à 14:47
source utilisateur

voix
0

J'ai fini par utiliser cesLuisResolutionExtensions pour extraire des valeurs DateTime et entités LUIS en général.

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");
}
Créé 15/10/2019 à 17:47
source utilisateur

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