コード例 #1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            SNetwork net = new SNetwork(processes);

            string connectionString = System.Configuration.ConfigurationManager
                                      .ConnectionStrings["KnowledgeBaseConnectionString"].ConnectionString;

            try
            {
                KnowledgeBase.DataBase.CreateConnection(connectionString);
                KnowledgeBase.DataBase.DataFromSemanticNetwork(net);
                KnowledgeBase.DataBase.WriteToDataBase();
            }
            catch
            {
                Response.Redirect("application?db=failed");
            }
        }
コード例 #2
0
        protected void ButtonShowGraph_Click(object sender, EventArgs e)
        {
            SNetwork snet = new SNetwork(processes);

            snet.SaveToPng(Server.MapPath("graph.png"));

            HyperLink link = new HyperLink();

            link.NavigateUrl = "/graph.png";

            Image imgControl = new Image();

            imgControl.ImageUrl    = "/graph.png";
            imgControl.BorderStyle = BorderStyle.Groove;
            imgControl.ID          = "Graph";
            imgControl.Visible     = true;
            link.Controls.Add(imgControl);
            ResultsPlaceholder.Controls.Add(link);

            System.Diagnostics.Debug.WriteLine(snet.GetDefinition("Cat"));
        }
コード例 #3
0
		/// <summary>
		/// Заполнить объект данными из семантической сети
		/// </summary>
		/// <param name="net">Семантическая сеть</param>
        public static void DataFromSemanticNetwork(SNetwork net)
        {
            _predicates.Clear();
            _instanses.Clear();
            _axioms.Clear();

            _predicates.Add(new Predicate("x has value y", "HasVal", new Arg("x"), new Arg("y")));
            foreach (var n in net.Objects)
            {
                if (n.DataType == NodeType.Instance)
                    _instanses.Add(n.Name);
                else
                    _predicates.Add(new Predicate(String.Format("x is {0}", n.Name), n.Name, new Arg("x")));
            }
            foreach (var action in net.Actions)
            {
                if (GetPredicate(action.Name) == null)
                {
                    if (action.Target != null)
                        _predicates.Add(new Predicate(String.Format("x {0} y",action.Name),action.Name,new Arg("x"),new Arg("y")));
                    else _predicates.Add(new Predicate(String.Format("x {0}", action.Name), action.Name, new Arg("x")));
                }
                if (action.Value != "" && !_instanses.Contains(action.Value))
                    _instanses.Add(action.Value);
                
            }
            foreach (var action in net.Actions)
            {
                if (!action.IsDepended)
                {
                    Dictionary<string, string> args = new Dictionary<string, string>();
                    StringBuilder sb = new StringBuilder();
                    StringBuilder sb_args = new StringBuilder();
                    int arg_num = 0;
                    if (action.Name == "is a")
                    {
                        if (action.Object.DataType == NodeType.Object)
                        {
                            _axioms.Add(new Axiom(String.Format("Ɐx: {0}(x)→{1}(x)", action.Object.Name, action.Target.Name)));
                        }
                        else _axioms.Add(new Axiom(String.Format("{1}({0})", action.Object.Name, action.Target.Name)));

                    }
                    else
                    {
                        Edge curr = action;
                        do
                        {
                            if (!args.ContainsKey(curr.Object.Name))
                            {
                                if (curr.Object.DataType == NodeType.Object)
                                {
                                    args[curr.Object.Name] = String.Format("x{0}", arg_num);
                                    sb_args.Append(String.Format("Ɐx{0}", arg_num++));
                                    if (curr.IsDepended)
                                        sb.Insert(0,String.Format("{0}({1})˄", curr.Object.Name, args[curr.Object.Name]));
                                    else sb.Insert(0, String.Format("{0}({1})→(", curr.Object.Name, args[curr.Object.Name]));
                                }
                                else args[curr.Object.Name] = curr.Object.Name;
                            }
                            
                            if (curr.Target != null)
                            {
                                if (!args.ContainsKey(curr.Target.Name))
                                {
                                    if (curr.Target.DataType == NodeType.Object)
                                    {
                                        args[curr.Target.Name] = String.Format("x{0}", arg_num);
                                        sb_args.Append(String.Format("Ɐx{0}", arg_num++));
                                        sb.Insert(0,String.Format("{0}({1})˄", curr.Target.Name, args[curr.Target.Name]));
                                    }
                                    else args[curr.Target.Name] = curr.Target.Name;
                                }
                                sb.Append(String.Format("{0}({1},{2})", curr.Name, args[curr.Object.Name], args[curr.Target.Name]));
                                if (curr.Value != "")
                                    sb.AppendFormat("˄HasVal({0},{1})", curr.Target, curr.Value);
                            }
                            else sb.Append(String.Format("{0}({1})", curr.Name, args[curr.Object.Name]));

                            if (curr.ChainEdge != null)
                                sb.Append("→");
                            curr = curr.ChainEdge;
                        } while (curr != null);
                        sb.Insert(0, sb_args.ToString() + ":");
                        sb.Append(")");
                        _axioms.Add(new Axiom(sb.ToString()));
                    }
                }
            }
        }