Commits

Mikhail Korobov committed 58108cb

parse.normalized is fixed for KnownSuffixAnalyzer

Comments (0)

Files changed (3)

pymorphy2/units/base.py

         return previous_predictor.get_lexeme(form, methods_stack[:-1])
 
     def normalized(self, form):
-        raise NotImplementedError(form)
+        # default implementation is super-slow!
+        methods_stack = form[-1]
+        return self.get_lexeme(form, methods_stack)[0]
 
     def __repr__(self):
         return str("<%s>") % self.__class__.__name__

pymorphy2/units/by_analogy.py

         super(_AnalogyAnalizer, self).__init__(morph)
         self.dict_analyzer = DictionaryAnalyzer(morph)
 
-
-    # def get_lexeme(self, form, methods_stack):
-    #     """
-    #     Return a lexeme (given a parsed word).
-    #     """
-    #     return self.dict_analyzer.get_lexeme(form, methods_stack)
-    #
-
     def normalized(self, form):
         return self.dict_analyzer.normalized(form)
 
 
                 for fixed_suffix, parses in para_data:
                     methods = (
-                        # (self.dict_analyzer, fixed_suffix),
+                        (self.dict_analyzer, fixed_suffix),
                         (self, fixed_suffix),
                     )
 

tests/test_lexemes.py

 он-то его-то него-то ему-то нему-то его-то него-то им-то ним-то нём-то
 экс-лжекот экс-лжекота экс-лжекоту экс-лжекота экс-лжекотом экс-лжекоте экс-лжекоты экс-лжекотов экс-лжекотам экс-лжекотов экс-лжекотами экс-лжекотах
 лжекот лжекота лжекоту лжекота лжекотом лжекоте лжекоты лжекотов лжекотам лжекотов лжекотами лжекотах
-"""
+кот-маг кота-мага коту-магу кота-мага котом-магом коте-маге коты-маги котов-магов котам-магам котов-магов котами-магами котах-магах
+йотка йотки йотке йотку йоткой йоткою йотке йотки йоток йоткам йотки йотками йотках
+""".splitlines()
 
 
 def _lexeme_variants(word):
     return res
 
 
-@pytest.mark.parametrize("lexeme", LEXEMES.splitlines())
+@pytest.mark.parametrize("lexeme", LEXEMES)
 def test_has_lexemes(lexeme):
     lexeme_words = tuple(lexeme.split())
+    variants = _lexeme_variants(lexeme_words[0])
+    if lexeme_words not in variants:
+        for v in variants:
+            print(" ".join(v))
+            print()
+        assert False
+
+
+@pytest.mark.parametrize("lexeme", LEXEMES)
+def test_normalized_is_first(lexeme):
+    lexeme_words = tuple(lexeme.split())
+    first_parse = morph.parse(lexeme_words[0])[0]
+    normal_form = (first_parse.word, first_parse.tag.POS)
+
     for word in lexeme_words:
-        variants = _lexeme_variants(word)
-        if lexeme_words not in variants:
-            for v in variants:
-                print(" ".join(v))
-            assert False
+        parses = morph.parse(word)
+        normalized = [(p.normalized.word, p.normalized.tag.POS) for p in parses]
+        assert normal_form in normalized