def _iter_lexeme(self, form): methods_stack = form[4] assert len(methods_stack) == 1 this_method, left_methods, right_methods = methods_stack[0] assert this_method is self if self._fixed_left_method_was_used(left_methods): # Form is obtained by parsing right part, # assuming that left part is an uninflected prefix. # Lexeme can be calculated from the right part in this case: prefix = left_methods + '-' right_form = without_fixed_prefix( replace_methods_stack(form, right_methods), len(prefix) ) base_analyzer = right_methods[-1][0] lexeme = base_analyzer.get_lexeme(right_form) return ( replace_methods_stack( with_prefix(f, prefix), ((this_method, left_methods, f[4]),) ) for f in lexeme ) else: # Form is obtained by parsing both parts. # Compute lexemes for left and right parts, # then merge them. left_form = self._without_right_part( replace_methods_stack(form, left_methods) ) right_form = self._without_left_part( replace_methods_stack(form, right_methods) ) left_lexeme = left_methods[-1][0].get_lexeme(left_form) right_lexeme = right_methods[-1][0].get_lexeme(right_form) return self._merge_lexemes(left_lexeme, right_lexeme)
def lexemizer(self, form, this_method): prefix = this_method[1] lexeme = yield without_fixed_prefix(form, len(prefix)) yield [with_prefix(f, prefix) for f in lexeme]
def normalizer(self, form, this_method): prefix = this_method[1] normal_form = yield without_fixed_prefix(form, len(prefix)) yield with_prefix(normal_form, prefix)