static void ProcessSentence2(string phrase, SolarixGrammarEngineNET.GrammarEngine2 gren, int max_len) { nb_processed += 1; if (nb_skip != 0 && nb_processed < nb_skip) { return; } if (phrase.Length > 2) { bool used = false; string terminator = ""; if (IsSentenceTerminator(phrase.Last())) { terminator = new string(phrase.Last(), 1); // Удалим финальные символы типа . или ! int finalizers = 1; for (int i = phrase.Length - 2; i > 0; --i) { if (IsSentenceTerminator(phrase[i])) { finalizers++; } } phrase = phrase.Substring(0, phrase.Length - finalizers); } if (!processed_phrases.Contains(phrase)) { processed_phrases.Add(phrase); string phrase2 = Preprocess(phrase, gren); // Выполним оценку синтаксического качества предложения, чтобы отсеять мусор. int id_language = SolarixGrammarEngineNET.GrammarEngineAPI.RUSSIAN_LANGUAGE; SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags morph_flags = SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags.SOL_GREN_COMPLETE_ONLY | SolarixGrammarEngineNET.GrammarEngine.MorphologyFlags.SOL_GREN_MODEL; SolarixGrammarEngineNET.GrammarEngine.SyntaxFlags syntax_flags = SolarixGrammarEngineNET.GrammarEngine.SyntaxFlags.DEFAULT; int MaxAlt = 40; int constraints = 600000 | (MaxAlt << 22); using (SolarixGrammarEngineNET.AnalysisResults linkages = gren.AnalyzeSyntax(phrase2, id_language, morph_flags, syntax_flags, constraints)) { if (linkages.Count == 3) { SolarixGrammarEngineNET.SyntaxTreeNode root = linkages[1]; List <SolarixGrammarEngineNET.SyntaxTreeNode> terms = GetTerms(root).OrderBy(z => z.GetWordPosition()).ToList(); int score = linkages.Score; bool good = false; if (score >= -4) { good = true; if (!syntax_checker.IsEmpty()) { FootPrint footprint = new FootPrint(gren, terms); // Проверим синтаксическую структуру фразы, чтобы отсеять разговорную некондицию. good = syntax_checker.IsGoodSyntax(footprint); } } if (good) { used = true; WriteSample(phrase + terminator); wrt_samples.Flush(); } else { SkippedSample(phrase); } } } } } Console.Write("{0} processed, {1} stored\r", nb_processed, nb_stored); return; }