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