コード例 #1
0
ファイル: Validation.cs プロジェクト: ironyirina/Semantic-Bar
 private IEnumerable <string> CheckIfNamedNodeHasUnnamedObject()
 {
     return(from node in SemanticWeb.Web().Nodes.Where(x => x.Name != string.Empty && x.Name != "#System")
            let unnamedObjects = SemanticWeb.Web().GetNodesDirectedToMe(node.ID, "#Name")
                                 where !unnamedObjects.Any()
                                 select string.Format("В именованную вершину {0} не входит ни одной дуги #Name", node.Name));
 }
コード例 #2
0
        //есть ли в bellini coctail персиковый сок
        //есть / есть ли / есть ли в
        //

        private List <MyConceptStruct> AnalyzeWord()
        {
            var nearestWords = new List <MyConceptStruct>();
            int k            = 1;

            while (k <= _maxLen && k <= _words.Count)
            {
                string s = "";
                for (int i = 0; i < k; i++)
                {
                    s += _words[i] + " ";
                }
                var recognozedNode = _searchSynonyms
                                         ? SemanticWeb.Web().FindNodeWithSynonyms(s)
                                         : SemanticWeb.Web().FindNode(s);
                nearestWords.Add(new MyConceptStruct
                {
                    Name = recognozedNode == null
                                                    ? s.Trim()
                                                    : recognozedNode.Name,
                    IsRecognized = recognozedNode != null
                });
                k++;
            }
            return(nearestWords);
        }
コード例 #3
0
ファイル: Validation.cs プロジェクト: ironyirina/Semantic-Bar
 private IEnumerable <string> CheckArcToNamedNodes()
 {
     return(from namedNode in SemanticWeb.Web().Nodes.Where(x => x.Name != string.Empty)
            from arc in SemanticWeb.Web().Arcs.Where(x => x.To == namedNode.ID)
            where arc.Name.Trim().ToUpper() != "#Name".ToUpper()
            select string.Format("В именованную вершину {0} входит дуга с именем {1}",
                                 namedNode.Name, arc.Name));
 }
コード例 #4
0
ファイル: Validation.cs プロジェクト: ironyirina/Semantic-Bar
 private IEnumerable <string> CheckNamedNodes()
 {
     return(from node in SemanticWeb.Web().Nodes
            where node.Name != string.Empty && node.Name != "#System" && SemanticWeb.Web().Arcs
            .Where(x => x.Name.Substring(0, 2) != "_#")
            .Any(x => x.From == node.ID)
            select string.Format("Из именованной вершины {0} выходят дуги", node));
 }
コード例 #5
0
ファイル: Validation.cs プロジェクト: ironyirina/Semantic-Bar
        private IEnumerable <string> CheckMetadata()
        {
            //node = a_part_of smth is_a metadata
            //node.name not in SemanticWeb.AllReservedArcs

            return(from node in SemanticWeb.Web().Nodes.Where(x => SemanticWeb.Web().ArcExists(x.ID, "#a_part_of"))
                   let parent = SemanticWeb.Web().GetAttr(node.ID, "#a_part_of")
                                where
                                SemanticWeb.Web().ArcExists(parent.ID, "#is_a", SemanticWeb.Web().Atom("#Metadata")) &&
                                SemanticWeb.AllReservedArcs.Contains(node.Name.Trim().ToUpper())
                                select "Имя вершины из метазнаний совпадает с именем системной дуги");
        }
コード例 #6
0
ファイル: Validation.cs プロジェクト: ironyirina/Semantic-Bar
        /// <summary>
        /// Проверка экземпляров экземпляров
        /// </summary>
        /// <returns>Возвращает список ошибок</returns>
        private IEnumerable <string> CheckInstancesOfInstances()
        {
            const string arcName = "#is_instance";

            return(from node in SemanticWeb.Web().Nodes
                   where SemanticWeb.Web().ArcExists(node.ID, arcName)
                   let classNode = SemanticWeb.Web().GetAttr(node.ID, arcName)
                                   where SemanticWeb.Web().ArcExists(classNode.ID, arcName)
                                   select
                                   string.Format("Вершина {0} является экземпляром {1}, " + "являющейся экземпляром {2}", node.Name,
                                                 classNode.Name, SemanticWeb.Web().GetAttr(classNode.ID, arcName)));
        }
コード例 #7
0
 /// <summary>
 /// Десериализация
 /// </summary>
 /// <param name="path">Путь к файлу</param>
 /// <returns></returns>
 public static void ReadFromXml(string path)
 {
     try
     {
         using (var fs = new FileStream(path, FileMode.Open))
         {
             var reader = XmlDictionaryReader.CreateTextReader(fs, Encoding.UTF8,
                                                               new XmlDictionaryReaderQuotas(), null);
             var ser = new DataContractSerializer(typeof(SemanticWeb));
             _web = (SemanticWeb)ser.ReadObject(reader);
         }
         IsChanged = false;
     }
     catch
     {
         _web = new SemanticWeb();
     }
 }
コード例 #8
0
ファイル: Validation.cs プロジェクト: ironyirina/Semantic-Bar
        /// <summary>
        /// Проходит вверх по иерархии по дугам #is_a. Если дошли до системных вершин, то всё ок,
        /// если снова вернулись на исходную вершину, то есть цикл.
        /// </summary>
        /// <param name="startNodeID">Вершина для проверки</param>
        /// <param name="nodeID">Вершина для проверки</param>
        /// <returns>ID родителя</returns>
        private bool OldestParentExists(int startNodeID, int nodeID)
        {
            //пришли в ту же вершину
            if (startNodeID == nodeID)
            {
                return(false);
            }
            //дошли до конца
            if (!SemanticWeb.Web().ArcExists(nodeID, "#is_a"))
            {
                return(true);
            }
            //идём дальше
            var parentNode = SemanticWeb.Web().GetAllAttr(nodeID, "#is_a");

            return(parentNode.Select(node => OldestParentExists(startNodeID, node.ID))
                   .FirstOrDefault());
        }
コード例 #9
0
ファイル: Validation.cs プロジェクト: ironyirina/Semantic-Bar
        /// <summary>
        /// Проверка рекурсии
        /// </summary>
        /// <returns>Возвращает список ошибок</returns>
        private IEnumerable <string> CheckRecursion()
        {
            var errors       = new List <string>();
            var nodesWithIsA = SemanticWeb.Web().Nodes.Where(x => SemanticWeb.Web().ArcExists(x.ID, "#is_a"));

            foreach (var node in nodesWithIsA)
            {
                foreach (var parentNode in SemanticWeb.Web().GetAllAttr(node.ID, "#is_a"))
                {
                    if (!OldestParentExists(node.ID, parentNode.ID))
                    {
                        errors.Add(string.Format("Циклическая зависимость: вершина {0} является "
                                                 + "потомком самой себя", node));
                    }
                }
            }
            return(errors);
        }
コード例 #10
0
ファイル: Validation.cs プロジェクト: ironyirina/Semantic-Bar
        private IEnumerable <string> CheckUniqueArcs(List <string> arcNames)
        {
            var res          = new List <string>();
            var unnamedNodes = SemanticWeb.Web().Nodes.Where(x => x.Name == string.Empty).ToList();
            var ok           = true;

            for (int i = 0; i < unnamedNodes.Count() && ok; i++)
            {
                for (int j = 0; j < arcNames.Count && ok; j++)
                {
                    if (SemanticWeb.Web().GetAllAttr(unnamedNodes[i].ID, arcNames[j]).Count > 1)
                    {
                        res.Add(string.Format("Из неименованной вершины выходит несколько дуг {0}", arcNames[j]));
                        ok = false;
                    }
                }
            }
            return(res);
        }
コード例 #11
0
        //public static void MakeEverythingGood()
        //{
        //    foreach (var node in _web.Nodes)
        //    {
        //        if (node.Synonyms.Count == 0)
        //            node.Synonyms.Add(node.Name);
        //        foreach (var synonym in node.Synonyms)
        //        {
        //            node.WordForms.Add(synonym, new List<string>());
        //        }
        //    }
        //}

        public static void Close()
        {
            _web = null;
        }
コード例 #12
0
 public static SemanticWeb Web()
 {
     return(_web ?? (_web = new SemanticWeb()));
 }