public void PushToRedis() { IntentService intentService = new IntentService(); PatternService patternService = new PatternService(); List <IntentRedisViewModel> intents = intentService.GetAllForRedis(); List <string> patterns = patternService.GetFullPatterns(); var db = RedisConnectionHelper.Connection.GetDatabase(); db.StringSet(@"BotIntents", JsonConvert.SerializeObject(intents)); db.StringSet(@"BotPatterns", JsonConvert.SerializeObject(patterns)); }
public void Delete(int intentId) { var intent = this.FirstOrDefault(q => q.Id == intentId); if (intent != null) { intent.Active = false; PatternService patternService = new PatternService(); var patterns = patternService.Get(q => q.Active == true && q.IntentId == intentId).ToList(); foreach (var pattern in patterns) { pattern.IntentId = null; pattern.Group = -1; } patternService.SaveChanges(); this.SaveChanges(); } }
public void Update(int id, string name, int[] patterns, int[] groups) { try { Intent intent = this.FirstOrDefault(q => q.Id == id); if (intent != null) { intent.Name = name; } this.DbSet.SaveChanges(); PatternService patternService = new PatternService(); List <Pattern> ps = patternService.Get(q => q.IntentId == id).ToList(); foreach (var p in ps) { p.Active = false; p.IntentId = null; } if (patterns != null) { for (var i = 0; i < patterns.Length; ++i) { Pattern pattern = patternService.FirstOrDefault(q => q.Id == patterns[i]); pattern.IntentId = id; pattern.Group = groups[i]; pattern.Active = true; } } patternService.SaveChanges(); } catch (Exception e) { throw e; } }
public Intent Create(string name, int[] patterns, int[] groups) { Intent intent = this.Add(new Intent() { Active = true, Name = name, }); PatternService patternService = new PatternService(); int i = 0; foreach (var patternId in patterns) { var pattern = patternService.FirstOrDefault(q => q.Id == patternId && q.Active == true); pattern.Group = groups[i]; pattern.IntentId = intent.Id; ++i; } patternService.SaveChanges(); this.SaveChanges(); return(intent); }
public ExperimentResultViewModel Analyze(string input) { string inputTmp = input.Trim(); PatternService patternService = new PatternService(); List <Pattern> patterns = patternService.Get(q => q.Active == true).ToList(); int maxElements = -1; Pattern matchPattern = null; Dictionary <string, string> matches = null; string specialValues = ""; //when the entity simply just want some words foreach (var pattern in patterns) { specialValues = ""; bool hasUnknwonPhrase = false; Dictionary <string, string> matchesTmp = new Dictionary <string, string>(); inputTmp = input.Trim(); List <PatternEntityMapping> pems = pattern.PatternEntityMappings.Where(q => q.Active == true).OrderBy(q => q.Position).ToList(); for (int i = 0; i < pems.Count; i++) { Regex regex = null; if (pems[i].Entity.Words == @".*?") { specialValues = inputTmp; hasUnknwonPhrase = true; } else { if (pattern.MatchBegin && pattern.MatchEnd && pems.Count == 1) { regex = new Regex(@"(?:^|\W)^(" + pems[i].Entity.Words + @")$(?:$|\W)", RegexOptions.IgnoreCase); } else if (i == pems.Count - 1 && pattern.MatchEnd) { regex = new Regex(@"(?:^|\W)(" + pems[i].Entity.Words + @")$(?:$|\W)", RegexOptions.IgnoreCase); } else if (specialValues == "") { if (i == 0) { if (pattern.MatchBegin) { regex = new Regex(@"(?:^|\W)^(" + pems[i].Entity.Words + @")(?:$|\W)", RegexOptions.IgnoreCase); } else { regex = new Regex(@"(?:^|\W)(" + pems[i].Entity.Words + @")(?:$|\W)", RegexOptions.IgnoreCase); } } else { regex = new Regex(@"(?:^|\W)^(" + pems[i].Entity.Words + @")(?:$|\W)", RegexOptions.IgnoreCase); } } else { regex = new Regex(@"(?:^|\W)" + pems[i].Entity.Words + @"(?:$|\W)", RegexOptions.IgnoreCase); } Match result = regex.Match(inputTmp); if (result.Success) { if (matchesTmp.ContainsKey(pems[i].Entity.Name)) { string value = matchesTmp[pems[i].Entity.Name]; matchesTmp[pems[i].Entity.Name] = value + ";" + result.Value; } else { matchesTmp.Add(pems[i].Entity.Name, result.Value); } if (specialValues != "") { matchesTmp.Add("Cụm từ", specialValues.Substring(0, specialValues.Length - result.Length).Trim()); specialValues = ""; } if (i == pems.Count - 1) { if ((!hasUnknwonPhrase && matchesTmp.Count > maxElements) || (hasUnknwonPhrase && matchesTmp.Count - 1 > maxElements)) { matchPattern = pattern; matches = matchesTmp; maxElements = hasUnknwonPhrase ? matchesTmp.Count - 1 : matchesTmp.Count; if (result.Index + result.Value.Trim().Length + 1 < inputTmp.Length) { specialValues = inputTmp.Substring(result.Index + result.Value.Trim().Length + 1); } break; } } else { if (result.Index + result.Value.Trim().Length + 1 < inputTmp.Length) { inputTmp = inputTmp.Substring(result.Index + result.Value.Trim().Length + 1).Trim(); } } } else { break; } } } if (specialValues != "") { if (matches == null && ((!hasUnknwonPhrase && matchesTmp.Count > maxElements) || (hasUnknwonPhrase && matchesTmp.Count - 1 > maxElements))) { matches = matchesTmp; matchPattern = pattern; matches.Add("Cụm từ", specialValues.Trim()); maxElements = hasUnknwonPhrase ? matchesTmp.Count - 1 : matchesTmp.Count; } else if (matches != null && !matches.ContainsKey("Cụm từ") && ((!hasUnknwonPhrase && matchesTmp.Count > maxElements) || (hasUnknwonPhrase && matchesTmp.Count - 1 > maxElements))) { matches.Add("Cụm từ", specialValues.Trim()); matchPattern = pattern; maxElements = hasUnknwonPhrase ? matchesTmp.Count - 1 : matchesTmp.Count; } specialValues = ""; } } ExperimentResultViewModel model = new ExperimentResultViewModel(); if (matchPattern != null) { model.IntentId = matchPattern.IntentId ?? 0; model.Group = matchPattern.Group ?? 0; model.Matches = matches; } return(model); }