in Snip-Insights/SnipInsight.Forms/Features/Insights/OCR/OCRViewModel.cs [295:369]
private void ProcessLUISData(LUISModel luisResult)
{
List<string> datesFound = new List<string>();
this.calendarDates.Clear();
this.toAddress.Clear();
if (luisResult != null && luisResult.Entities != null)
{
for (int i = 0; i < luisResult.Entities.Count; i++)
{
Entity entity = luisResult.Entities[i];
Entity nextEntity = i + 1 < luisResult.Entities.Count ? luisResult.Entities[i + 1] : null;
var validYear = @"^[1-9]\d*$";
switch (entity.Type)
{
case "builtin.email":
this.toAddress.Add(entity.TheEntity);
this.EmailAvailable = true;
break;
case "builtin.datetimeV2.datetime":
datesFound.Add(entity.Resolution.Values[0].TheValue);
break;
case "builtin.datetimeV2.date":
if (nextEntity != null && nextEntity.Type.Equals("builtin.datetimeV2.time"))
{
datesFound.Add(entity.Resolution.Values[0].TheValue + " " + nextEntity.Resolution.Values[0].TheValue);
i++;
}
else if (nextEntity != null && nextEntity.Type.Equals("builtin.datetimeV2.timerange"))
{
datesFound.Add(entity.Resolution.Values[0].TheValue + " " + nextEntity.Resolution.Values[0].Start);
datesFound.Add(entity.Resolution.Values[0].TheValue + " " + nextEntity.Resolution.Values[0].End);
i++;
}
else if (nextEntity != null && !nextEntity.Type.Equals("builtin.datetimeV2.daterange"))
{
datesFound.Add(entity.Resolution.Values.Count == 2 ? entity.Resolution.Values[1].TheValue : entity.Resolution.Values[0].TheValue);
}
break;
case "builtin.datetimeV2.daterange":
Match isYear = Regex.Match(entity.Resolution.Values[0].Timex, validYear);
// Should not create calender event for recognized year
if (!isYear.Success)
{
datesFound.Add(entity.Resolution.Values[0].Start);
datesFound.Add(entity.Resolution.Values[0].End);
}
break;
case "builtin.datetimeV2.time":
datesFound.Add(entity.Resolution.Values[0].TheValue);
break;
case "builtin.datetimeV2.timerange":
datesFound.Add(entity.Resolution.Values[0].Start);
datesFound.Add(entity.Resolution.Values[0].End);
break;
case "builtin.datetimeV2.datetimerange":
datesFound.Add(entity.Resolution.Values[0].Start);
datesFound.Add(entity.Resolution.Values[0].End);
break;
}
}
this.DatesAvailable = this.ExtractDateTime(datesFound);
this.EmailAvailable = (this.toAddress.Count > 0) ? true : false;
}
else
{
this.DatesAvailable = false;
this.EmailAvailable = false;
}
}