in snipinsights/windows/SnipInsight/AIServices/AIViewModels/OCRViewModel.cs [360:437]
private async Task GetLUISInsights(string ocrText)
{
List<string> datesFound = new List<string>();
CalendarButtonVisibility = Visibility.Collapsed;
EmailButtonVisibility = Visibility.Collapsed;
calendarDates.Clear();
toAddress.Clear();
try
{
var luisResult = await luisInsights.GetResult(ocrText);
for (int i = 0; i < luisResult.Entities.Count; i++)
{
LUISModel.Entity entity = luisResult.Entities[i];
LUISModel.Entity nextEntity = i + 1 < luisResult.Entities.Count ? luisResult.Entities[i + 1] : null;
var validYear = @"^[1-9]\d*$";
switch (entity.Type)
{
case "builtin.email":
toAddress.Add(entity.TheEntity);
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;
}
}
DatesAvailable = ExtractDateTime(datesFound);
EmailAvailable = (toAddress.Count > 0) ? true : false;
}
catch (WebException e)
{
Debug.WriteLine(e.Message);
DatesAvailable = false;
EmailAvailable = false;
}
}