in libraries/Microsoft.Bot.Builder.AI.LUIS/LuisUtil.cs [88:164]
internal static JToken ExtractEntityValue(EntityModel entity)
{
if (entity.Type.StartsWith("builtin.geographyV2.", StringComparison.Ordinal))
{
var subtype = entity.Type.Substring(20);
return new JObject(
new JProperty("type", subtype),
new JProperty("location", entity.Entity));
}
if (entity.AdditionalProperties == null || !entity.AdditionalProperties.TryGetValue("resolution", out dynamic resolution))
{
return entity.Entity;
}
if (entity.Type.StartsWith("builtin.datetime.", StringComparison.Ordinal))
{
return JObject.FromObject(resolution);
}
if (entity.Type.StartsWith("builtin.datetimeV2.", StringComparison.Ordinal))
{
if (resolution.values == null || resolution.values.Count == 0)
{
return JArray.FromObject(resolution);
}
var resolutionValues = (IEnumerable<dynamic>)resolution.values;
var type = resolution.values[0].type;
var timexes = resolutionValues.Select(val => val.timex);
var distinctTimexes = timexes.Distinct();
return new JObject(new JProperty("type", type), new JProperty("timex", JArray.FromObject(distinctTimexes)));
}
if (entity.Type.StartsWith("builtin.ordinalV2", StringComparison.Ordinal))
{
return new JObject(
new JProperty("relativeTo", resolution.relativeTo),
new JProperty("offset", Number(resolution.offset)));
}
switch (entity.Type)
{
case "builtin.number":
case "builtin.ordinal": return Number(resolution.value);
case "builtin.percentage":
{
var svalue = (string)resolution.value;
if (svalue.EndsWith("%", StringComparison.Ordinal))
{
svalue = svalue.Substring(0, svalue.Length - 1);
}
return Number(svalue);
}
case "builtin.age":
case "builtin.dimension":
case "builtin.currency":
case "builtin.temperature":
{
var units = (string)resolution.unit;
var val = Number(resolution.value);
var obj = new JObject();
if (val != null)
{
obj.Add("number", val);
}
obj.Add("units", units);
return obj;
}
default:
return resolution.value ?? (resolution.values != null ? JArray.FromObject(resolution.values) : resolution);
}
}