コード例 #1
0
ファイル: Loader.cs プロジェクト: ironyirina/Semantic-Bar
        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);
            }
        }
コード例 #2
0
ファイル: Searcher.cs プロジェクト: ironyirina/Semantic-Bar
        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));
            }
        }