RPST это библиотека для расстановки ударений, детектирования размера и рифм в русскоязычных силлабо-тонических стихотворениях
и песенной лирике. Результатом работы также является числовая оценка дефектов поэтичности на уровне строк, строф и
целых произведений.
Исследователи и NLP разработчики могут использовать RPST для следующих задач:
- Отбор качественных данных для обучения языковых моделей из собранных в интернете.
- Автоматическая оценка генераций стихотворений языковыми моделями.
- Ранжирование выдачи генеративной языковой модели, выбор наиболее поэтичных генераций.
Для установки выполните в консоли следующие команды:
git clone https://github.com/RussianNLP/RussianPoetryScansionTool.git
cd RussianPoetryScansionTool
pip install .Необходимые для работы библиотеки модели и словари будут скачаны из репозитория.
После установки выполните следующий код:
import russian_scansion
tool = russian_scansion.create_rpst_instance()
poem = """Вменяйте ж мне в вину, что я столь мал,
Чтоб за благодеянья Вам воздать,
Что к Вашей я любви не воззывал,
Чтоб узами прочней с собой связать,
Что часто тёмным помыслом я сам
Часы, Вам дорогие столь, дарил,
Что я вверялся часто парусам,
Чей ветр меня от Вас вдаль уносил.
Внесите в список Ваш: мой дикий нрав,
Ошибки, факты, подозрений ложь,
Но, полностью вину мою признав,
Возненавидя, не казните всё ж."""
scansion = tool.align(poem.split('\n'))
print('score={} meter={} scheme={}'.format(scansion.score, scansion.meter, scansion.rhyme_scheme))
print(scansion.get_stressed_lines(show_secondary_accentuation=True))Он выведет в консоль примерно такую информацию:
score=0.34583045610408747 meter=ямб scheme=None
Вменя́йте ж мне́ в вину́, что я́ столь ма́л,
Чтоб за благодея́нья Ва́м возда́ть,
Что к Ва́шей я́ любви́ не воззыва́л,
Чтоб у́зами прочне́й с собо́й связа́ть,
Что ча́сто тё́мным по́мыслом я са́м
Часы́, Вам дороги́е сто́ль, дари́л,
Что я́ вверя́лся ча́сто паруса́м,
Чей ве́тр меня́ от Ва́с вдаль уноси́л.
Внеси́те в спи́сок Ва́ш: мой ди́кий нра́в,
Оши́бки, фа́кты, подозре́ний ло́жь,
Но, по́лностью вину́ мою́ призна́в,
Возненави́дя, не казни́те всё́ ж.
Основное ударение в слове (если оно есть) обозначается символом Combining Acute Accent с кодом U+0301.
Второстепенные ударения, если они обнаружены и их вывод разрешен, обозначаются символом Combining Grave Accent с кодом U+0300.
Фукнция russian_scansion.create_rpst_instance создает экземпляр RPST с загруженными моделями, словарями
и настройками по умолчанию, пригодными для большинства сценарием использования.
Анализ стихотворения выполняется вызовом метода align у созданного экземпляра RPST. В качестве аргумента
этот метод принимает список строк стихотворения, поэтому в приведенном выше примере можно видеть poem.split('\n').
Результатом работы align будет экземпляр класса с различной информацией о стихотворении. В частности, поле score
содержит оценку техничности от 0 до 1.
Если техничность равна 0, то текст удалось распознать как силлабо-тоническое стихотворение. В некоторых случаях алгоритм может сгенерировать исключение на не-поэтических текстах. В таких случаях можно считать, что получена тоже оценка техничности, равная 0.
Если техничность равна 1, то ударения в тексте идеально совпали с одним из 5 двух- и трехсложных метров, и обнаружена рифмовка строк. Промежуточные значения техничности соответствуют разному количеству отступлений от идеального метра и дефектов.
Метод get_stressed_lines у возвращенного объекта выводит текст стихотворения с расставленными основными ударениями
после подгонки под метр.