private void ProcessLUISData()

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