public ContextRecognizer(List <TokenRecognizer> _points, OmonymTokenRecognizer _omonym_point, SolarixGrammarEngineNET.GrammarEngine2 gren) { id = seq_counter++; omonym_point = _omonym_point; points = _points; success_count = 0; fail_count = 0; success_samples = new HashSet <MatchedContextInfo>(); fail_samples = new HashSet <MatchedContextInfo>(); rule_context_str = PrintContext(gren); }
public OmonymContextEnumerator(SolarixGrammarEngineNET.AnalysisResults tokens, int _omonym_position, int _left_i, int _len, SolarixGrammarEngineNET.GrammarEngine2 _gren) { gren = _gren; left_i = _left_i; len = _len; omonym_position = _omonym_position; recognizers = new List <ContextRecognizer>(); // Для каждого токена, кроме омонимичной формы, генерируем список вариантов. // ... пока только код для контекстов длины=2 if (len == 2) { SolarixGrammarEngineNET.SyntaxTreeNode omonym_token = tokens[left_i + omonym_position]; OmonymTokenRecognizer omonym_point = new OmonymTokenRecognizer(omonym_position, omonym_token); if (omonym_position == 0) { TokenTagsEnumerator tte = new TokenTagsEnumerator(IsBoundaryToken(tokens, left_i + 1), tokens[left_i + 1], gren); int n = tte.Count; for (int i = 0; i < n; ++i) { List <TokenRecognizer> points = new List <TokenRecognizer>(); points.Add(null); // это омонимичная форма points.Add(tte[i]); ContextRecognizer ctx_recognizer = new ContextRecognizer(points, omonym_point, gren); recognizers.Add(ctx_recognizer); } } else { TokenTagsEnumerator tte = new TokenTagsEnumerator(IsBoundaryToken(tokens, left_i), tokens[left_i], gren); int n = tte.Count; for (int i = 0; i < n; ++i) { List <TokenRecognizer> points = new List <TokenRecognizer>(); points.Add(tte[i]); points.Add(null); // это омонимичная форма ContextRecognizer ctx_recognizer = new ContextRecognizer(points, omonym_point, gren); recognizers.Add(ctx_recognizer); } } } }