mirror of
https://github.com/IRBorisov/cctext.git
synced 2025-06-25 21:20:36 +03:00
447 lines
30 KiB
Python
447 lines
30 KiB
Python
''' Unit tests: ruparser. '''
|
||
import unittest
|
||
|
||
from typing import Iterable, Optional
|
||
from cctext import PhraseParser
|
||
|
||
parser = PhraseParser()
|
||
|
||
|
||
class TestRuParser(unittest.TestCase):
|
||
''' Test class for russian parsing. '''
|
||
|
||
def _assert_parse(self, text: str, expected: Iterable[str],
|
||
require_index: int = -1,
|
||
require_grams: Optional[Iterable[str]] = None):
|
||
phrase = parser.parse(text, require_index, require_grams)
|
||
self.assertIsNotNone(phrase)
|
||
if phrase:
|
||
self.assertEqual(phrase.get_morpho().tag.grammemes, set(expected))
|
||
|
||
def _assert_inflect(self, text: str, tags: list[str], expected: str):
|
||
model = parser.parse(text)
|
||
if not model:
|
||
result = text
|
||
else:
|
||
result = model.inflect(frozenset(tags))
|
||
self.assertEqual(result, expected)
|
||
|
||
def test_parse_word(self):
|
||
''' Test parse for single word. '''
|
||
self._assert_parse('1', ['NUMB', 'intg'])
|
||
self._assert_parse('пять', ['NUMR', 'nomn'])
|
||
self._assert_parse('трёх', ['NUMR', 'gent'])
|
||
self._assert_parse('трех', ['NUMR', 'gent'])
|
||
self._assert_parse('круча', ['NOUN', 'femn', 'sing', 'nomn', 'inan'])
|
||
self._assert_parse('круть', ['NOUN', 'femn', 'sing', 'nomn', 'inan', 'Sgtm', 'Geox'])
|
||
self._assert_parse('ПВО', ['NOUN', 'femn', 'sing', 'nomn', 'inan', 'Sgtm', 'Abbr', 'Fixd'])
|
||
self._assert_parse('СМИ', ['NOUN', 'plur', 'nomn', 'inan', 'Pltm', 'Abbr', 'Fixd', 'GNdr'])
|
||
self._assert_parse('ему', ['NPRO', 'masc', 'sing', 'datv', '3per', 'Anph'])
|
||
self._assert_parse('крутит', ['VERB', 'sing', '3per', 'pres', 'impf', 'tran', 'indc'])
|
||
self._assert_parse('смеркалось', ['VERB', 'neut', 'sing', 'Impe', 'past', 'impf', 'intr', 'indc'])
|
||
self._assert_parse('крутить', ['INFN', 'impf', 'tran'])
|
||
self._assert_parse('крученый', ['ADJF', 'masc', 'sing', 'nomn'])
|
||
self._assert_parse('крут', ['ADJS', 'masc', 'sing', 'Qual'])
|
||
self._assert_parse('крутящего', ['PRTF', 'masc', 'sing', 'gent', 'pres', 'impf', 'tran', 'actv'])
|
||
self._assert_parse('откручен', ['PRTS', 'masc', 'sing', 'past', 'perf', 'pssv'])
|
||
self._assert_parse('крутя', ['GRND', 'pres', 'impf', 'tran'])
|
||
self._assert_parse('круто', ['ADVB'])
|
||
self._assert_parse('круче', ['COMP', 'Qual'])
|
||
self._assert_parse(',', ['PNCT'])
|
||
self._assert_parse('32-', ['intg', 'NUMB'])
|
||
|
||
self._assert_parse('слон', ['NOUN', 'anim', 'masc', 'sing', 'nomn'], require_index=0)
|
||
self._assert_parse('слон', ['NOUN', 'anim', 'masc', 'sing', 'nomn'], require_grams=['masc'])
|
||
self._assert_parse('прямой', ['ADJF', 'gent', 'sing', 'femn', 'Qual'], require_index=0)
|
||
self._assert_parse('прямой', ['ADJF', 'datv', 'Qual', 'sing', 'femn'], require_index=1)
|
||
self._assert_parse('прямой', ['NOUN', 'sing', 'inan', 'femn', 'gent'], require_grams=['NOUN'])
|
||
|
||
self._assert_parse('консистенции', ['NOUN', 'inan', 'femn', 'plur', 'nomn'])
|
||
self._assert_parse('тест', ['NOUN', 'sing', 'masc', 'inan', 'nomn'])
|
||
self._assert_parse('петля', ['NOUN', 'inan', 'femn', 'sing', 'nomn'])
|
||
|
||
self._assert_parse('Слон', ['NOUN', 'anim', 'masc', 'sing', 'nomn'])
|
||
self._assert_parse('СМИ', ['NOUN', 'Pltm', 'GNdr', 'Fixd', 'inan', 'Abbr', 'plur', 'nomn'])
|
||
self.assertEqual(parser.parse('КАиП'), None)
|
||
self.assertEqual(parser.parse('СЛОН'), None)
|
||
self.assertEqual(parser.parse(''), None)
|
||
self.assertEqual(parser.parse('слон', require_grams=set(['femn'])), None)
|
||
self.assertEqual(parser.parse('32', require_grams=set(['NOUN'])), None)
|
||
self.assertEqual(parser.parse('32-', require_grams=set(['NOUN'])), None)
|
||
self.assertEqual(parser.parse('слон', require_index=42), None)
|
||
|
||
def test_parse_text(self):
|
||
''' Test parse for multiword sequences. '''
|
||
self._assert_parse(', ,', ['PNCT'])
|
||
self._assert_parse('слон,', ['NOUN', 'anim', 'masc', 'sing', 'nomn'])
|
||
|
||
self._assert_parse('синий слон', ['NOUN', 'anim', 'masc', 'sing', 'nomn'])
|
||
self._assert_parse('слон синий', ['NOUN', 'anim', 'masc', 'sing', 'nomn'])
|
||
self._assert_parse('тихий Дон', ['NOUN', 'anim', 'masc', 'sing', 'nomn'])
|
||
self._assert_parse('слон, лежащий на траве', ['NOUN', 'anim', 'masc', 'sing', 'nomn'])
|
||
self._assert_parse('лежащий на траве слон', ['NOUN', 'anim', 'masc', 'sing', 'nomn'])
|
||
self._assert_parse('города улиц', ['NOUN', 'nomn', 'plur', 'masc', 'inan'])
|
||
self._assert_parse('первый дом улиц города', ['NOUN', 'inan', 'masc', 'nomn', 'sing'])
|
||
self._assert_parse('быстро едет', ['VERB', 'intr', 'impf', '3per', 'sing', 'indc', 'pres'])
|
||
self._assert_parse('летучий 1-2-пептид', ['NOUN', 'masc', 'nomn', 'sing', 'inan'])
|
||
|
||
self._assert_parse('прямой угол', ['NOUN', 'masc', 'nomn', 'inan', 'sing'])
|
||
self._assert_parse('прямого угла', ['NOUN', 'sing', 'inan', 'masc', 'gent'])
|
||
self._assert_parse('угла прямой', ['NOUN', 'sing', 'inan', 'masc', 'gent'])
|
||
self._assert_parse('бесконечной прямой', ['NOUN', 'gent', 'femn', 'sing', 'inan'])
|
||
self._assert_parse('складские операции', ['NOUN', 'femn', 'plur', 'inan', 'nomn'])
|
||
self._assert_parse('незначительному воздействию хозяйственной деятельности',
|
||
['NOUN', 'datv', 'sing', 'neut', 'inan'])
|
||
|
||
self._assert_parse('варить овсянку', ['INFN', 'tran', 'impf'])
|
||
self._assert_parse('варить рис', ['INFN', 'tran', 'impf'])
|
||
|
||
self._assert_parse('нарочито сложный', ['ADJF', 'sing', 'masc', 'nomn', 'Qual'])
|
||
self._assert_parse('части программы', ['NOUN', 'femn', 'plur', 'nomn', 'inan'])
|
||
self._assert_parse('летучий 1-2-фторметил', ['NOUN', 'nomn', 'sing', 'masc', 'inan'])
|
||
self._assert_parse('отрезок времени', ['NOUN', 'nomn', 'sing', 'masc', 'inan'])
|
||
self._assert_parse('портки сушить', ['INFN', 'impf', 'tran'])
|
||
self._assert_parse('портки вешай', ['VERB', 'tran', 'impr', 'impf', 'sing', 'excl'])
|
||
self._assert_parse('Анализирует состояние организации.',
|
||
['VERB', 'sing', 'tran', 'pres', '3per', 'impf', 'indc'])
|
||
self._assert_parse('Во взаимодействии с подразделениями Генеральной прокуратуры формирует перечень показателей',
|
||
['VERB', 'sing', 'tran', 'pres', '3per', 'impf', 'indc'])
|
||
|
||
def test_parse_coordination(self):
|
||
''' Test parse coordination info. '''
|
||
self.assertEqual(parser.parse('говорить').coordination, [-1, 1])
|
||
self.assertEqual(parser.parse('ворчливая карга').coordination, [2, -1, 0])
|
||
self.assertEqual(parser.parse('страна, объятая пожаром').coordination, [-1, -1, 2, -1, 2])
|
||
self.assertEqual(parser.parse('тихо говорил').coordination, [-1, -1, 2])
|
||
|
||
def test_normalize_word(self):
|
||
''' Test normalize for single word. '''
|
||
self.assertEqual(parser.normalize(''), '')
|
||
self.assertEqual(parser.normalize('123'), '123')
|
||
self.assertEqual(parser.normalize('test'), 'test')
|
||
self.assertEqual(parser.normalize('первого'), 'первый')
|
||
self.assertEqual(parser.normalize('слону'), 'слон')
|
||
self.assertEqual(parser.normalize('слонам'), 'слон')
|
||
self.assertEqual(parser.normalize('обеспечил'), 'обеспечить')
|
||
self.assertEqual(parser.normalize('сильную'), 'сильный')
|
||
self.assertEqual(parser.normalize('бежавший'), 'бежать')
|
||
self.assertEqual(parser.normalize('1 2 3'), '1 2 3')
|
||
|
||
def test_normalize_text(self):
|
||
''' Test normalize for multiword collation. '''
|
||
self.assertEqual(parser.normalize('синего слона'), 'синий слон')
|
||
self.assertEqual(parser.normalize('тихо говоривший'), 'тихо говорить')
|
||
self.assertEqual(parser.normalize('канавой квартала'), 'канава квартала')
|
||
|
||
def test_inflect_word(self):
|
||
''' Test inflection for single word. '''
|
||
self._assert_inflect('', [], '')
|
||
self._assert_inflect('invalid', [], 'invalid')
|
||
self._assert_inflect('invalid', ['nomn'], 'invalid')
|
||
self._assert_inflect('', ['nomn'], '')
|
||
self._assert_inflect('123', ['nomn'], '123')
|
||
self._assert_inflect('слона', [], 'слона')
|
||
self._assert_inflect('слона', ['ADJF'], 'слона')
|
||
|
||
self._assert_inflect('слона', ['nomn'], 'слон')
|
||
self._assert_inflect('объектоид', ['datv'], 'объектоиду')
|
||
self._assert_inflect('терм-функция', ['datv'], 'терм-функции')
|
||
|
||
self._assert_inflect('Слона', ['nomn'], 'Слон')
|
||
self._assert_inflect('СМИ', ['datv'], 'СМИ')
|
||
self._assert_inflect('КАНС', ['datv'], 'КАНС')
|
||
self._assert_inflect('КАиП', ['datv'], 'КАиП')
|
||
self._assert_inflect('АТ', ['datv'], 'АТ')
|
||
self._assert_inflect('А-проекция', ['datv'], 'А-проекции')
|
||
|
||
def test_inflect_noun(self):
|
||
''' Test inflection for single noun. '''
|
||
self._assert_inflect('книга', ['nomn'], 'книга')
|
||
self._assert_inflect('книга', ['gent'], 'книги')
|
||
self._assert_inflect('книга', ['datv'], 'книге')
|
||
self._assert_inflect('книга', ['accs'], 'книгу')
|
||
self._assert_inflect('книга', ['ablt'], 'книгой')
|
||
self._assert_inflect('книга', ['loct'], 'книге')
|
||
self._assert_inflect('люди', ['loct'], 'людях')
|
||
|
||
self._assert_inflect('книга', ['plur'], 'книги')
|
||
self._assert_inflect('люди', ['sing'], 'человек')
|
||
self._assert_inflect('человек', ['plur'], 'люди')
|
||
self._assert_inflect('человек', ['plur', 'loct'], 'людях')
|
||
|
||
self._assert_inflect('человеку', ['masc'], 'человеку')
|
||
self._assert_inflect('человеку', ['neut'], 'человеку')
|
||
self._assert_inflect('человека', ['femn'], 'человека')
|
||
self._assert_inflect('человека', ['past'], 'человека')
|
||
|
||
def test_inflect_npro(self):
|
||
''' Test inflection for single pronoun. '''
|
||
self._assert_inflect('меня', ['nomn'], 'я')
|
||
self._assert_inflect('я', ['gent'], 'меня')
|
||
self._assert_inflect('я', ['datv'], 'мне')
|
||
self._assert_inflect('я', ['accs'], 'меня')
|
||
self._assert_inflect('я', ['ablt'], 'мной')
|
||
self._assert_inflect('я', ['loct'], 'мне')
|
||
|
||
self._assert_inflect('я', ['ADJF'], 'я')
|
||
self._assert_inflect('я', ['NOUN'], 'я')
|
||
self._assert_inflect('я', ['2per'], 'я')
|
||
self._assert_inflect('я', ['past'], 'я')
|
||
|
||
def test_inflect_numr(self):
|
||
''' Test inflection for single numeric. '''
|
||
self._assert_inflect('трёх', ['nomn'], 'три')
|
||
self._assert_inflect('три', ['gent'], 'трёх')
|
||
self._assert_inflect('три', ['datv'], 'трём')
|
||
self._assert_inflect('три', ['accs', 'inan'], 'три')
|
||
self._assert_inflect('три', ['accs', 'anim'], 'трёх')
|
||
self._assert_inflect('три', ['ablt'], 'тремя')
|
||
self._assert_inflect('три', ['loct'], 'трёх')
|
||
|
||
def test_inflect_adjf(self):
|
||
''' Test inflection for single adjectif. '''
|
||
self._assert_inflect('хороший', ['nomn'], 'хороший')
|
||
self._assert_inflect('хороший', ['gent'], 'хорошего')
|
||
self._assert_inflect('хороший', ['datv'], 'хорошему')
|
||
self._assert_inflect('хороший', ['accs'], 'хорошего')
|
||
self._assert_inflect('хороший', ['ablt'], 'хорошим')
|
||
self._assert_inflect('хороший', ['loct'], 'хорошем')
|
||
|
||
self._assert_inflect('хороший', ['plur'], 'хорошие')
|
||
self._assert_inflect('хорошие', ['sing'], 'хороший')
|
||
self._assert_inflect('хорошие', ['sing', 'datv'], 'хорошему')
|
||
self._assert_inflect('хорошие', ['plur', 'masc', 'datv'], 'хорошим')
|
||
|
||
self._assert_inflect('хорошая', ['masc'], 'хороший')
|
||
self._assert_inflect('перепончатокрылое', ['masc'], 'перепончатокрылый')
|
||
self._assert_inflect('хороший', ['neut'], 'хорошее')
|
||
self._assert_inflect('хорошая', ['neut'], 'хорошее')
|
||
self._assert_inflect('хороший', ['femn'], 'хорошая')
|
||
self._assert_inflect('перепончатокрылое', ['femn'], 'перепончатокрылая')
|
||
|
||
self._assert_inflect('хороший', ['masc', 'femn'], 'хороший')
|
||
self._assert_inflect('хороший', ['plur', 'femn'], 'хорошие')
|
||
self._assert_inflect('хороший', ['past'], 'хороший')
|
||
|
||
def test_inflect_prtf(self):
|
||
''' Test inflection for single participle. '''
|
||
self._assert_inflect('бегущего', ['nomn'], 'бегущий')
|
||
self._assert_inflect('бегущий', ['gent'], 'бегущего')
|
||
self._assert_inflect('бегущий', ['datv'], 'бегущему')
|
||
self._assert_inflect('бегущий', ['accs'], 'бегущего')
|
||
self._assert_inflect('бегущий', ['ablt'], 'бегущим')
|
||
self._assert_inflect('бегущий', ['loct'], 'бегущем')
|
||
self._assert_inflect('бегущая', ['loct'], 'бегущей')
|
||
self._assert_inflect('бежавшая', ['loct'], 'бежавшей')
|
||
|
||
self._assert_inflect('бегущий', ['plur'], 'бегущие')
|
||
self._assert_inflect('бегущие', ['sing'], 'бегущий')
|
||
self._assert_inflect('бегущие', ['sing', 'datv'], 'бегущему')
|
||
|
||
self._assert_inflect('бегущий', ['femn'], 'бегущая')
|
||
self._assert_inflect('бегущий', ['neut'], 'бегущее')
|
||
self._assert_inflect('бегущая', ['masc'], 'бегущий')
|
||
|
||
self._assert_inflect('бегущий', ['past'], 'бежавший')
|
||
self._assert_inflect('бежавших', ['pres'], 'бегущих')
|
||
|
||
self._assert_inflect('бегущий', ['masc', 'femn'], 'бегущий')
|
||
self._assert_inflect('бегущий', ['plur', 'femn'], 'бегущие')
|
||
|
||
def test_inflect_verb(self):
|
||
''' Test inflection for single verb. '''
|
||
self._assert_inflect('говорить', ['1per'], 'говорю')
|
||
self._assert_inflect('говорить', ['2per'], 'говоришь')
|
||
self._assert_inflect('говорить', ['2per', 'plur'], 'говорите')
|
||
self._assert_inflect('говорить', ['3per'], 'говорит')
|
||
|
||
self._assert_inflect('говорите', ['1per'], 'говорим')
|
||
self._assert_inflect('говорите', ['3per'], 'говорят')
|
||
|
||
self._assert_inflect('говорит', ['plur'], 'говорят')
|
||
self._assert_inflect('говорят', ['sing'], 'говорит')
|
||
|
||
self._assert_inflect('говорит', ['past'], 'говорил')
|
||
self._assert_inflect('говорил', ['pres'], 'говорю')
|
||
|
||
self._assert_inflect('говорили', ['sing'], 'говорил')
|
||
self._assert_inflect('говорил', ['plur'], 'говорили')
|
||
|
||
self._assert_inflect('говорила', ['masc'], 'говорил')
|
||
self._assert_inflect('говорили', ['masc'], 'говорил')
|
||
self._assert_inflect('говорил', ['neut'], 'говорило')
|
||
self._assert_inflect('говорил', ['femn'], 'говорила')
|
||
|
||
self._assert_inflect('говорить', ['datv'], 'говорить')
|
||
|
||
def test_inflect_text_nominal(self):
|
||
''' Test inflection for multiword text in nominal form. '''
|
||
self._assert_inflect('синий короткий', ['accs', 'sing', 'femn'], 'синюю короткую')
|
||
self._assert_inflect('красивые слоны', ['accs', 'sing'], 'красивого слона')
|
||
self._assert_inflect('вход процесса', ['loct', 'plur'], 'входах процесса')
|
||
self._assert_inflect('нарочито сложный тест', ['datv', 'sing'], 'нарочито сложному тесту')
|
||
self._assert_inflect('первый дом улиц города', ['loct', 'plur'], 'первых домах улиц города')
|
||
self._assert_inflect('шкала оценок', ['loct', 'plur'], 'шкалах оценок')
|
||
self._assert_inflect('складские операции', ['sing', 'datv'], 'складской операции')
|
||
self._assert_inflect('стороны конфликтного перехода', ['loct', 'sing'], 'стороне конфликтного перехода')
|
||
self._assert_inflect('уникомплексные тектологические переходы', ['loct', 'sing'],
|
||
'уникомплексном тектологическом переходе')
|
||
|
||
self._assert_inflect('слабый НИР', ['datv', 'sing'], 'слабому НИР')
|
||
self._assert_inflect('слабый НИР', ['accs', 'plur'], 'слабых НИР')
|
||
self._assert_inflect('летучий 1-2-бутан', ['ablt', 'sing'], 'летучим 1-2-бутаном')
|
||
self._assert_inflect('летучий 1-2-фторметил', ['ablt', 'sing'], 'летучим 1-2-фторметилом')
|
||
|
||
self._assert_inflect('красивые процессы', ['accs', 'sing'], 'красивого процесс')
|
||
self._assert_inflect('красивые процессы', ['gent', 'sing'], 'красивого процесса')
|
||
self._assert_inflect('части программы', ['ablt', 'sing'], 'части программой')
|
||
self._assert_inflect('первые здания', ['ablt', 'sing'], 'первым зданием')
|
||
self._assert_inflect('прямой слон', ['ablt', 'sing'], 'прямым слоном')
|
||
|
||
self._assert_inflect('тихо говорить', ['past', 'masc'], 'тихо говорил')
|
||
self._assert_inflect('быть готовым', ['past', 'masc'], 'был готовым')
|
||
self._assert_inflect('уметь готовить', ['pres', '2per'], 'умеешь готовить')
|
||
self._assert_inflect('готовить рис', ['pres', '1per'], 'готовлю рис')
|
||
|
||
# self._assert_inflect('десять миллионов', ['datv'], 'десяти миллионам')
|
||
# self._assert_inflect('десять апельсинов', ['datv'], 'десяти апельсинов')
|
||
# self._assert_inflect('два миллиона', ['datv'], 'двум миллионам')
|
||
|
||
self._assert_inflect('техногенема n-го порядка', ['datv'], 'техногенеме n-го порядка')
|
||
self._assert_inflect('Положение об органе АБВ', ['datv'], 'Положению об органе АБВ')
|
||
|
||
def test_inflect_text_cross(self):
|
||
''' Test inflection for multiword text in multiple forms. '''
|
||
self._assert_inflect('слона кота', ['nomn'], 'слон кота')
|
||
self._assert_inflect('готовкой риса', ['nomn'], 'готовка риса')
|
||
|
||
# self._assert_inflect('реципиенту воздействия', ['nomn'], 'реципиент воздействия')
|
||
|
||
def test_inflect_complex_mainword(self):
|
||
''' Test inflection of mainword conmprised of multiple words. '''
|
||
# Do not parse complex main words
|
||
self._assert_inflect('слона и кота', ['nomn'], 'слон и кота')
|
||
self._assert_inflect('сказал и поехал', ['INFN'], 'сказать и поехал')
|
||
|
||
def test_inflect_word_pos(self):
|
||
''' Test inflection for word changing pars of speech. '''
|
||
self._assert_inflect('обеспечит', ['INFN'], 'обеспечить')
|
||
self._assert_inflect('обеспечить', ['VERB', '1per'], 'обеспечу')
|
||
# self._assert_inflect('обеспечить', ['NOUN', 'sing','nomn'], 'обеспечение')
|
||
# self._assert_inflect('обеспечить', ['NOUN', 'plur','datv'], 'обеспечениям')
|
||
# self._assert_inflect('синеть', ['NOUN'], 'синь')
|
||
# self._assert_inflect('готовить', ['NOUN', 'sing'], 'готовка')
|
||
# self._assert_inflect('обеспечить', ['ADJF'], '???')
|
||
# self._assert_inflect('обеспечить', ['ADJS'], '???')
|
||
# self._assert_inflect('синеть', ['ADJF'], 'синий')
|
||
# self._assert_inflect('готовить', ['ADJF', 'sing', 'femn'], 'готовая')
|
||
self._assert_inflect('обеспечить', ['PRTF', 'plur', 'past'], 'обеспечившие')
|
||
self._assert_inflect('обеспечить', ['PRTS', 'plur'], 'обеспечены')
|
||
self._assert_inflect('обеспечить', ['GRND', 'past'], 'обеспечив')
|
||
# self._assert_inflect('обеспечить', ['ADVB'], 'обеспечённо')
|
||
# self._assert_inflect('обеспечить', ['COMP'], 'обеспеченнее')
|
||
|
||
# self._assert_inflect('обеспечение', ['INFN'], 'обеспечить')
|
||
# self._assert_inflect('обеспечение', ['VERB','1per'], 'обеспечу')
|
||
self._assert_inflect('обеспечение', ['NOUN', 'plur', 'nomn'], 'обеспечения')
|
||
self._assert_inflect('обеспечение', ['NOUN', 'plur', 'datv'], 'обеспечениям')
|
||
# self._assert_inflect('синь', ['ADJF'], 'синий')
|
||
# self._assert_inflect('обеспечение', ['PRTF', 'plur', 'past'], 'обеспечившие')
|
||
# self._assert_inflect('обеспечение', ['PRTS', 'plur'], 'обеспечены')
|
||
# self._assert_inflect('обеспечение', ['GRND', 'past'], 'обеспечив')
|
||
# self._assert_inflect('обеспечение', ['ADVB'], 'обеспечённо')
|
||
# self._assert_inflect('обеспечение', ['COMP'], 'обеспеченнее')
|
||
|
||
# self._assert_inflect('синий', ['INFN'], 'синеть')
|
||
# self._assert_inflect('синий', ['VERB','1per'], 'синею')
|
||
# self._assert_inflect('синий', ['NOUN', 'plur','nomn'], 'синьки')
|
||
# self._assert_inflect('синий', ['NOUN', 'plur','datv'], 'синькам')
|
||
self._assert_inflect('синий', ['ADJS'], 'синь')
|
||
self._assert_inflect('хороший', ['ADJS'], 'хорош')
|
||
# self._assert_inflect('синий', ['PRTF', 'plur', 'past'], 'синевшие')
|
||
# self._assert_inflect('синий', ['PRTS', 'plur'], '??')
|
||
# self._assert_inflect('синий', ['GRND', 'past'], 'синев')
|
||
# self._assert_inflect('хороший', ['ADVB'], 'хорошо')
|
||
self._assert_inflect('синий', ['COMP'], 'синее')
|
||
|
||
self._assert_inflect('обеспечащий', ['INFN'], 'обеспечить')
|
||
self._assert_inflect('обеспечивающий', ['INFN'], 'обеспечивать')
|
||
self._assert_inflect('бегущий', ['INFN'], 'бежать')
|
||
self._assert_inflect('бегущий', ['VERB'], 'бегу')
|
||
self._assert_inflect('бежавшего', ['VERB'], 'бежал')
|
||
# self._assert_inflect('обеспечащий', ['NOUN', 'plur','datv'], 'обеспечениям')
|
||
# self._assert_inflect('синеющий', ['NOUN'], 'синь')
|
||
# self._assert_inflect('готовящий', ['NOUN', 'sing'], 'готовка')
|
||
# self._assert_inflect('синеющий', ['ADJF'], 'синий')
|
||
self._assert_inflect('обеспечащий', ['PRTF', 'plur', 'past'], 'обеспечившие')
|
||
self._assert_inflect('обеспечащий', ['PRTS', 'plur'], 'обеспечимы')
|
||
self._assert_inflect('обеспечащий', ['GRND', 'past'], 'обеспечив')
|
||
# self._assert_inflect('обеспечащий', ['ADVB'], 'обеспечённо')
|
||
# self._assert_inflect('обеспечащий', ['COMP'], 'обеспеченнее')
|
||
|
||
def test_inflect_text_pos(self):
|
||
''' Test inflection for multiword text changing parts of speech. '''
|
||
# self._assert_inflect('готовить еду', ['NOUN', 'sing'], 'готовка еды')
|
||
# self._assert_inflect('обеспечение безопасности', ['INFN'], 'обеспечить безопасность')
|
||
# self._assert_inflect('сильный удар по мячу', ['INFN'], 'сильно ударить по мячу')
|
||
self._assert_inflect('сильно обиженный', ['INFN'], 'сильно обидеть')
|
||
# self._assert_inflect('сильно обиженный', ['NOUN'], 'сильная обида')
|
||
# self._assert_inflect('надежно обеспечить', ['NOUN'], 'надежное обеспечение')
|
||
|
||
def test_inflect_invalid_text(self):
|
||
''' Test inflection for multiword not coordinated text. '''
|
||
self._assert_inflect('синими слоны', ['nomn', 'sing'], 'синими слон')
|
||
|
||
def test_inflect_context(self):
|
||
''' Test content inflection. '''
|
||
self.assertEqual(parser.inflect_context('', '', ''), '')
|
||
self.assertEqual(parser.inflect_context('', 'красивый', ''), '')
|
||
self.assertEqual(parser.inflect_context('', '', 'в'), '')
|
||
self.assertEqual(parser.inflect_context('слон', '', ''), 'слон')
|
||
|
||
self.assertEqual(parser.inflect_context('красивый', '', 'чашка'), 'красивая')
|
||
self.assertEqual(parser.inflect_context('красивый', '', 'черного'), 'красивого')
|
||
self.assertEqual(parser.inflect_context('слон', '', 'черного'), 'слона')
|
||
self.assertEqual(parser.inflect_context('слоны', 'сильный', 'черную'), 'слон')
|
||
self.assertEqual(parser.inflect_context('город', 'огня', ''), 'города')
|
||
# self.assertEqual(parser.inflect_context('улица', 'дом', ''), 'улицы')
|
||
|
||
self.assertEqual(parser.inflect_context('большой город', 'стильного', 'необъятной страны'), 'большого города')
|
||
self.assertEqual(parser.inflect_context('город', '', ', расположенного неподалеку'), 'города')
|
||
|
||
def test_inflect_substitute(self):
|
||
''' Test substitute inflection. '''
|
||
self.assertEqual(parser.inflect_substitute('', ''), '')
|
||
self.assertEqual(parser.inflect_substitute('123', '123'), '123')
|
||
self.assertEqual(parser.inflect_substitute('', 'слон'), '')
|
||
self.assertEqual(parser.inflect_substitute('слон', ''), 'слон')
|
||
self.assertEqual(parser.inflect_substitute('слон', 'слон'), 'слон')
|
||
self.assertEqual(parser.inflect_substitute('слон', 'слоны'), 'слоны')
|
||
self.assertEqual(parser.inflect_substitute('слон', 'кошкой'), 'слоном')
|
||
self.assertEqual(parser.inflect_substitute('синий слон', 'стильного чайника'), 'синего слона')
|
||
self.assertEqual(parser.inflect_substitute('варить клюкву', 'осуществляет'), 'варит клюкву')
|
||
|
||
def test_inflect_dependant(self):
|
||
''' Test coordination inflection. '''
|
||
self.assertEqual(parser.inflect_dependant('', ''), '')
|
||
self.assertEqual(parser.inflect_dependant('', 'слон'), '')
|
||
self.assertEqual(parser.inflect_dependant('слон', ''), 'слон')
|
||
self.assertEqual(parser.inflect_dependant('общий', 'мать'), 'общая')
|
||
self.assertEqual(parser.inflect_dependant('синий', 'слонов'), 'синих')
|
||
self.assertEqual(parser.inflect_dependant('белый длинный', 'столами'), 'белыми длинными')
|
||
|
||
def test_find_substr(self):
|
||
''' Test substring search. '''
|
||
self.assertEqual(parser.find_substr('', ''), (0, 0))
|
||
self.assertEqual(parser.find_substr('слон', ''), (0, 0))
|
||
self.assertEqual(parser.find_substr('', 'слон'), (0, 0))
|
||
self.assertEqual(parser.find_substr('слон', 'слон'), (0, 4))
|
||
self.assertEqual(parser.find_substr('сложного слона', 'слон'), (9, 14))
|
||
self.assertEqual(parser.find_substr('сложного слона', 'слоном'), (9, 14))
|
||
self.assertEqual(parser.find_substr('сложного красивого слона', 'красивые слоном'), (9, 24))
|
||
self.assertEqual(parser.find_substr('человек', 'люди'), (0, 7))
|
||
|
||
|
||
if __name__ == '__main__':
|
||
unittest.main()
|