private static void LoadWord(AIMLData parent, List <string> pattern, string template) { var key = pattern[0].ToUpper().Trim(); pattern.RemoveAt(0); if (!parent.Data.ContainsKey(key)) { parent.Data.Add(key, new AIMLData(parent, key)); } if (pattern.Count > 0) { LoadWord(parent.Data[key], pattern, template); } else { parent.Data[key].Template = template; } }
public AIMLData(AIMLData parent, string key) { Parent = parent; Key = key; Data = new Dictionary <string, AIMLData>(); }
private static PatternData FindTemplateRecursive(AIMLData ai, List <string> text, PatternData data, int searchPos) { var key = text[searchPos]; if (data.IsInWildcard && searchPos < text.Count - 1 && !ai.Data.ContainsKey("_") && !ai.Data.ContainsKey(key.ToUpper()) && !ai.Data.ContainsKey("*")) { data.WildTexts[data.WildTexts.Count - 1].WildText += key + " "; return(FindTemplateRecursive(ai, text, data, searchPos + 1)); } if (ai.Data.ContainsKey("_")) { if (searchPos == text.Count - 1) { data.IsAnswer = true; data.Template = ai.Data["_"].Template; return(data); } data.WildTexts.Add(new WildData { WildText = key + " ", WildType = data.WildType }); data.IsInWildcard = true; data = FindTemplateRecursive(ai.Data["_"], text, data, searchPos + 1); if (data.IsAnswer) { return(data); } data.WildTexts.RemoveAt(data.WildTexts.Count - 1); data.WildType = data.WildTexts.Count == 0 ? StarType.Pattern : data.WildTexts[data.WildTexts.Count - 1].WildType; } if (ai.Data.ContainsKey(key.ToUpper())) { if (searchPos == text.Count - 1) { data.IsAnswer = true; data.Template = ai.Data[key.ToUpper()].Template; return(data); } if (key.ToUpper() == "<THAT>") { data.WildType = StarType.That; } if (key.ToUpper() == "<TOPIC>") { data.WildType = StarType.Topic; } data.IsInWildcard = false; data = FindTemplateRecursive(ai.Data[key.ToUpper()], text, data, searchPos + 1); if (data.IsAnswer) { return(data); } } if (!data.IsAnswer && ai.Data.ContainsKey("*")) { if (searchPos == text.Count - 1) { data.IsAnswer = true; data.Template = ai.Data["*"].Template; return(data); } data.WildTexts.Add(new WildData { WildText = key + " ", WildType = data.WildType }); data.IsInWildcard = true; data = FindTemplateRecursive(ai.Data["*"], text, data, searchPos + 1); if (data.IsAnswer) { return(data); } data.WildTexts.RemoveAt(data.WildTexts.Count - 1); data.WildType = data.WildTexts.Count == 0 ? StarType.Pattern : data.WildTexts[data.WildTexts.Count - 1].WildType; } return(data); }