public void Load() { _sendReport("Начинаем загрузку из файла " + _fileName); _reader = new StreamReader(_fileName); _fileContent = _reader.ReadToEnd(); var words = _fileContent.Split(new[] { ' ', '\r', '\n', '.', ',', ':' }).Where(x => x != string.Empty).ToList(); if (words.Count < 2) { _sendReport("Ошибка! Файл не содержит достаточно информации"); } if (!AnalyzeFirst(words[0])) { return; } var cw = new ConceptWorker(5, true); _sendReport("Разбиваем текст файла на понятия"); cw.FindConcepts(_fileContent, null); if (!AnalyzeName(DefineName(cw.Concepts))) { return; //определяем и анализируем имя } var unknownWords = cw.FindConcepts(_fileContent, null); while (unknownWords.Count > 0) { _sendReport("Найдены неизвестные слова: " + unknownWords.Aggregate("", (s1, s2) => s1 + s2 + " ")); var w = new UnknownWordsWindow { UnknownWords = unknownWords }; w.ShowDialog(); unknownWords = cw.FindConcepts(_fileContent, w.SkippedWords); } cw.Concepts.RemoveRange(0, 2); foreach (var concept in cw.Concepts.Select(x => x.Name)) { Ananyze(concept); } }
public Searcher(string input, Action <string> executeSimilarQuery, bool searchSynonyms, bool searchClasses) { WorkMemory = new WorkMemory(); _executeSimilarQuery = executeSimilarQuery; _searchSynonyms = searchSynonyms; _searchClasses = searchClasses; _input = input; var cw = new ConceptWorker(SemanticWeb.Web().Nodes.Max(x => x.Name.Length), _searchSynonyms); cw.FindAll(_input, null); _inputParts = cw.Concepts.Where(x => x.IsRecognized).Select(x => x.Name).ToList(); _nodesInQuery = GetNodesFromQuery(); WorkMemory.WorkedNodes.AddRange(_nodesInQuery); _unnamedNodesInQuery = GetUnnamedNodesFromQuery(); foreach (var unnamedNodesList in _unnamedNodesInQuery) { WorkMemory.WorkedNodes.AddRange(unnamedNodesList); } for (int i = 0; i < _nodesInQuery.Count; i++) { var node = _nodesInQuery[i]; var i1 = i; var uNodeList = _unnamedNodesInQuery.Where(x => x.Count > i1).Select(x => x[i1]); foreach (var uNode in uNodeList) { Node node1 = uNode; WorkMemory.WorkedArcs.AddRange(SemanticWeb.Web().Arcs.Where(x => x.From == node1.ID && x.Name == "#Name" && x.To == node.ID)); } } _unnamedSearcher = new List <UnnamedSearcher>(); foreach (var unnanedNodesList in _unnamedNodesInQuery) { _unnamedSearcher.Add(new UnnamedSearcher(_input, _executeSimilarQuery, WorkMemory, _searchClasses, unnanedNodesList)); } }