/// <summary> /// 构造方法 /// </summary> public Template() { //随机选项初始化 Rand = new Rand(); //设置变量初始化 SetVariable = new Variable(); //获取变量初始化 GetVariable = new Variable(); //方法集合初始化 Function = new Function(); //*号匹配符初始化 Star = new SortedList<int>(); //获取用户输入初始化 Input = -1; //初始化疑问 Questions = new List<Question>(); }
/// <summary> /// 应答机器人的初始化工作 /// </summary> public void Init(string resourceFolder = "") { if (!SetUp) { //xml文档对象 var xmlDoc = new XmlDocument(); //加载对应的智能文件 if (resourceFolder == "") { xmlDoc.Load(resourceFolder + "Iveely.AI.aiml"); } else { xmlDoc.Load(resourceFolder + "\\Iveely.AI.aiml"); } //子节点集合 var selectSingleNode = xmlDoc.SelectSingleNode("aiml"); if (selectSingleNode != null) { XmlNodeList nodeList = selectSingleNode.ChildNodes; //当前结点 //遍历每一个子节点 for (int i = 0; i < nodeList.Count; i++) { foreach (var categoryNode in nodeList[i].ChildNodes) { //将当前结点赋值 XmlNode currentNode = (XmlNode)categoryNode; //如果是类别结点 if (currentNode.Name.ToLower() == "category" && currentNode.HasChildNodes) { // 新建类别 var category = new Category(); //说明存在模式 var childList = currentNode.ChildNodes; for (int j = 0; j < childList.Count; j++) { //子节点赋值 XmlNode childNode = childList[j]; //如果是模式 if (childNode.Name.ToLower() == "pattern") { //新建模式 var pattern = new Pattern { Value = childNode.InnerXml.Trim() }; //模式复制 //下一个一定是模板 j++; //新建模板 var template = new Template(); //如果没有子结点 if (!childList[j].HasChildNodes) { //模板赋值 template.Value = childList[j].InnerXml.Trim(); } else { //获取当前所有的子节点 XmlNodeList innerList = childList[j].ChildNodes; //定义子节点值 string tempValue = ""; //遍历循环 for (int m = 0; m < innerList.Count; m++) { //如果是随机 if (innerList[m].Name.ToLower() == "random") { //说明存在随机组 var rand = new Rand(); //那么获取出随机值 for (var n = 0; n < innerList[m].ChildNodes.Count; n++) { //增加进去 rand.List.Add(innerList[m].ChildNodes[n].InnerXml); } //模板随机值 template.Rand = rand; } //如果是普通值 else if (innerList[m].Name.ToLower() == "#text") { tempValue += innerList[m].Value.Trim(); } //如果是*号标记 else if (innerList[m].Name.ToLower() == "star") { //获取star属性index,标识位置 int index = int.Parse(innerList[m].Attributes["index"].Value); //设定答值 template.Star.Add(index); } //如果是input号标记 else if (innerList[m].Name.ToLower() == "input") { //获取input属性index,标识位置 int index = int.Parse(innerList[m].Attributes["index"].Value); //设定答值 template.Input = index; } //如果是Set标记 else if (innerList[m].Name.ToLower() == "set") { //获取Set属性name,标识位置 string setName = innerList[m].Attributes["name"].Value; //索引号 string index = innerList[m].Attributes["index"].Value; //设定变量 template.SetVariable.Name = setName; //设定取值编号 template.SetVariable.Value = index; //利用Star来记录 template.Star.Add(int.Parse(index)); } //如果是Get标记 else if (innerList[m].Name.ToLower() == "get") { //获取get的变量 string getName = innerList[m].Attributes["name"].Value; //变量名 template.GetVariable.Name = getName; } //如果是函数功能标记 else if (innerList[m].Name.ToLower() == "function") { //获取函数名称 template.Function.Name = innerList[m].Attributes["name"].Value; //如果存在参数 if (innerList[m].Attributes["para"] != null) { //首先获取参数中的值 string[] par = innerList[m].Attributes["para"].Value.Split(','); //遍历每一个参数值 foreach (string p in par) { //首先记录下是哪些参数 template.Star.Add(int.Parse(p)); //在函数体中也记录 template.Function.Parameters.Add(p); } } } //如果是疑问 else if (innerList[m].Name.ToLower() == "question") { string[] questionStrings = innerList[m].InnerText.Split( new[] { ';', ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (var questionString in questionStrings) { //[*.0]和谁离婚了?[*.1] string[] text = questionString.Split(new[] { '?', '?' }, StringSplitOptions.RemoveEmptyEntries); if (text.Length == 2) { Template.Question question = new Template.Question { //Description = text[0], //Answer = text[1] }; template.AddQuestion(question); } } } } //将临时值放回去 template.Value = tempValue.Trim(); } //将模板赋值给模式 pattern.Template = template; //将模式添加到模式集合 category.Patterns.Add(pattern); } } //将类别添加到类别集合 Categorys.Add(category); } } } } } }