Example #1
0
 /// <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>();
 }
Example #2
0
        /// <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);
                            }
                        }
                    }
                }
            }

        }