Skip to content

Detection of poetic meter, rhyme, and stress placement in the texts of Russian accentual-syllabic poems and songs.

License

Notifications You must be signed in to change notification settings

RussianNLP/RussianPoetryScansionTool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RussianPoetryScansionTool

RPST это библиотека для расстановки ударений, детектирования размера и рифм в русскоязычных силлабо-тонических стихотворениях и песенной лирике. Результатом работы также является числовая оценка дефектов поэтичности на уровне строк, строф и целых произведений.

Исследователи и NLP разработчики могут использовать RPST для следующих задач:

  1. Отбор качественных данных для обучения языковых моделей из собранных в интернете.
  2. Автоматическая оценка генераций стихотворений языковыми моделями.
  3. Ранжирование выдачи генеративной языковой модели, выбор наиболее поэтичных генераций.

Установка

Для установки выполните в консоли следующие команды:

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 у возвращенного объекта выводит текст стихотворения с расставленными основными ударениями после подгонки под метр.

About

Detection of poetic meter, rhyme, and stress placement in the texts of Russian accentual-syllabic poems and songs.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages