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)); }
//есть ли в 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); }
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)); }
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)); }
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 "Имя вершины из метазнаний совпадает с именем системной дуги"); }
/// <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))); }
/// <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(); } }
/// <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()); }
/// <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); }
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); }
//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; }
public static SemanticWeb Web() { return(_web ?? (_web = new SemanticWeb())); }