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")
 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")
 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")
示例#4
0
    def handle(self, *args, **options):
        engine = Engine(language="ru")
        poems = Poem.objects.all()
        begin = int(options.get('from'))
        end = int(
            options.get('to')) if options.get('to') is not None else len(poems)
        poems = Poem.objects.all()[begin:end]

        xml_path = str(
            options.get('xml')) if options.get('xml') is not None else None
        raw_path = str(
            options.get('raw')) if options.get('raw') is not None else None

        db = options.get('db')
        author = options.get("author")
        markup_version = MarkupVersion.objects.get_or_create(name=author)[0]
        ModelMarkup.objects.filter(markup_version=markup_version).delete()

        xml_writer = None
        raw_writer = None
        if xml_path is not None:
            xml_path = os.path.join(BASE_DIR, xml_path)
            xml_writer = Writer(FileType.XML, xml_path)
            xml_writer.open()
        if raw_path is not None:
            raw_path = os.path.join(BASE_DIR, raw_path)
            raw_writer = Writer(FileType.RAW, raw_path)
            raw_writer.open()
        i = 0
        stress_predictor = engine.get_stress_predictor(
            stress_model_path=STRESS_MODEL,
            zalyzniak_dict=ZALYZNYAK_DICT,
            stress_trie_path=TRIE_PATH,
            raw_stress_dict_path=RAW_DICT_PATH)
        for p in poems:
            if "Automatic" in author:
                markup = Markup.process_text(p.text, stress_predictor)
                markup, result = MetreClassifier.improve_markup(markup)
                if xml_writer is not None:
                    xml_writer.write_markup(markup)
                if raw_writer is not None:
                    raw_writer.write_markup(markup)
                if db:
                    ModelMarkup.objects.create(poem=p,
                                               text=markup.to_json(),
                                               author="Automatic2",
                                               additional=result.to_json(),
                                               markup_version=markup_version)
            else:
                markup = p.markups.filter(author=author)[0]
                if xml_writer is not None:
                    xml_writer.write_markup(markup.get_markup())
                if raw_writer is not None:
                    raw_writer.write_markup(markup.get_markup())
            i += 1
            print(i)
        if raw_writer is not None:
            raw_writer.close()
        if xml_writer is not None:
            xml_writer.close()
 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")
 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)
示例#7
0
文件: api.py 项目: che1974/rupo
 def classify_metre(self, text: str, language: str = "ru") -> str:
     """
     :param text: текст.
     :param language: язык.
     :return: его метр.
     """
     return MetreClassifier.classify_metre(
         Markup.process_text(text,
                             self.get_stress_predictor(language))).metre
示例#8
0
    def __markup_text(text: str, stress_predictor: StressPredictor) -> Markup:
        """
        Разметка текста.

        :param text: текст.
        :return: разметка.
        """
        markup = Markup.process_text(text, stress_predictor)
        markup = MetreClassifier.improve_markup(markup)[0]
        return markup
 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")
示例#10
0
文件: api.py 项目: che1974/rupo
 def get_improved_markup(
         self,
         text: str,
         language: str = "ru") -> Tuple[Markup, ClassificationResult]:
     """
     :param text: текст.
     :param language: язык.
     :return: его разметка по словарю, классификатору метру и  ML классификатору.
     """
     markup = Markup.process_text(text, self.get_stress_predictor(language))
     return MetreClassifier.improve_markup(markup)
 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")
示例#12
0
    def generate_poem_by_line(self, line: str, rhyme_pattern: str,
                              stress_predictor: StressPredictor) -> str:
        """
        Генерация стихотвторения по одной строчке.

        :param stress_predictor: классификатор.
        :param line: строчка.
        :param rhyme_pattern: шаблон рифмы.
        :return: стихотворение
        """
        markup, result = MetreClassifier.improve_markup(
            Markup.process_text(line, stress_predictor))
        rhyme_word = markup.lines[0].words[-1]
        count_syllables = sum(
            [len(word.syllables) for word in markup.lines[0].words])
        metre_pattern = CompilationsSingleton.get().get_patterns(
            result.metre, count_syllables)[0]
        metre_pattern = metre_pattern.lower().replace("s",
                                                      "+").replace("u", "-")
        letters_to_rhymes = {rhyme_pattern[0]: {rhyme_word}}
        generated = self.generate_poem(metre_pattern, rhyme_pattern,
                                       len(metre_pattern), letters_to_rhymes)
        poem = line + "\n" + "\n".join(generated.split("\n")[1:])
        return poem