Source code for rupo.metre.test_metre_classifier

# -*- coding: utf-8 -*-
# Автор: Гусев Илья
# Описание: Тесты к классификатору метра.

import unittest
import jsonpickle
import copy
import logging
import sys

from rupo.main.markup import Markup
from rupo.stress.predictor import CombinedStressPredictor
from rupo.metre.metre_classifier import MetreClassifier, ClassificationResult, StressCorrection
from rupo.settings import RU_STRESS_DEFAULT_MODEL, ZALYZNYAK_DICT, CMU_DICT, RU_GRAPHEME_STRESS_PATH, \
    RU_GRAPHEME_STRESS_TRIE_PATH


[docs]class TestMetreClassifier(unittest.TestCase):
[docs] @classmethod def setUpClass(cls): cls.stress_predictor = CombinedStressPredictor( stress_model_path=RU_STRESS_DEFAULT_MODEL, zalyzniak_dict=ZALYZNYAK_DICT, cmu_dict=CMU_DICT, raw_stress_dict_path=RU_GRAPHEME_STRESS_PATH, stress_trie_path=RU_GRAPHEME_STRESS_TRIE_PATH ) logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
[docs] @classmethod def tearDownClass(cls): del cls.stress_predictor
[docs] def test_classification_result(self): result = ClassificationResult(5) result.additions["iambos"].append(StressCorrection(0, 0, 0, "", 0)) self.assertEqual(result, jsonpickle.decode(result.to_json()))
[docs] def test_metre_classifier1(self): text = "Горит восток зарёю новой.\n" \ "Уж на равнине, по холмам\n" \ "Грохочут пушки. Дым багровый\n" \ "Кругами всходит к небесам." markup, result = MetreClassifier.improve_markup(Markup.process_text(text, self.stress_predictor)) self.assertIsInstance(markup, Markup) self.assertIsInstance(result, ClassificationResult) self.assertEqual(result.metre, "iambos")
[docs] def test_metre_classifier2(self): text = "Буря мглою небо кроет,\n" \ "Вихри снежные крутя;\n" \ "То, как зверь, она завоет,\n" \ "То заплачет, как дитя..." markup, result = MetreClassifier.improve_markup(Markup.process_text(text, self.stress_predictor)) self.assertEqual(result.metre, "choreios")
[docs] def test_metre_classifier3(self): text = "На стеклах нарастает лед,\n"\ "Часы твердят: «Не трусь!»\n"\ "Услышать, что ко мне идет,\n"\ "И мертвой я боюсь.\n"\ "Как идола, молю я дверь;\n"\ "«Не пропускай беду!»\n"\ "Кто воет за стеной, как зверь,\n"\ "Кто прячется в саду?" markup, result = MetreClassifier.improve_markup(Markup.process_text(text, self.stress_predictor)) self.assertEqual(result.metre, "iambos")
[docs] def test_metre_classifier4(self): text = "Вот уж вечер. Роса\n" \ "Блестит на крапиве.\n"\ "Я стою у дороги,\n"\ "Прислонившись к иве.\n"\ "От луны свет большой\n"\ "Прямо на нашу крышу.\n"\ "Где-то песнь соловья\n"\ "Хорошо и тепло,\n"\ "Как зимой у печки.\n"\ "И березы стоят,\n"\ "Как большие свечки.\n"\ "И вдали за рекой,\n"\ "Видно, за опушкой,\n"\ "Сонный сторож стучит\n"\ "Мертвой колотушкой." markup, result = MetreClassifier.improve_markup(Markup.process_text(text, self.stress_predictor)) self.assertTrue(result.metre == "dolnik3" or result.metre == "dolnik2")
[docs] def test_metre_classifier5(self): text = "Глыбу кварца разбили молотом,\n" \ "И, веселым огнем горя,\n" \ "Заблестели крупинки золота\n" \ "В свете тусклого фонаря.\n" \ "И вокруг собрались откатчики:\n" \ "Редкий случай, чтоб так, в руде!\n" \ "И от ламп заплясали зайчики,\n" \ "Отражаясь в черной воде...\n" \ "Прислонившись к мокрой стене,\n" \ "Мы стояли вокруг.\n" \ "Курили,\n" \ "Прислонившись к мокрой стене,\n" \ "И мечтательно говорили\n" \ "Не о золоте — о весне.\n" \ "И о том, что скоро, наверно,\n" \ "На заливе вспотеет лед\n" \ "И, снега огласив сиреной,\n" \ "Наконец придет пароход...\n" \ "Покурили еще немного,\n" \ "Золотинки в кисет смели\n" \ "И опять — по своим дорогам,\n" \ "К вагонеткам своим пошли.\n" \ "Что нам золото? В дни тяжелые\n" \ "Я от жадности злой не слеп.\n" \ "Самородки большие, желтые\n" \ "Отдавал за табак и хлеб.\n" \ "Не о золоте были мысли...\n" \ "В ночь таежную у костра\n" \ "Есть над чем поразмыслить в жизни,\n" \ "Кроме\n" \ "Золота-серебра." markup, result = MetreClassifier.improve_markup(Markup.process_text(text, self.stress_predictor)) self.assertTrue(result.metre == "dolnik3" or result.metre == "dolnik2")
[docs] def test_metre_classifier6(self): text = "Лючинь печальная читала вечером ручьисто-вкрадчиво,\n" \ "Так чутко чувствуя журчащий вычурно чужой ей плач,\n" \ "И, в человечестве чтя нечто вечное, чем чушь Бокаччио,\n" \ "От чар отчаянья кручинно-скучная, чла час удач." markup, result = MetreClassifier.improve_markup(Markup.process_text(text, self.stress_predictor)) self.assertTrue(result.metre == "iambos")
[docs] def test_improve(self): text = "Буря мглою небо кроет,\n" \ "Вихри снежные крутя;\n" \ "То, как зверь, она завоет,\n" \ "То заплачет, как дитя..." initial_markup = Markup.process_text(text, self.stress_predictor) markup, result = MetreClassifier.improve_markup(copy.deepcopy(initial_markup)) self.assertNotEqual(markup.lines[0].words[0].syllables[0].stress, -1) self.assertEqual(markup.lines[0].words[0].syllables[1].stress, -1)