RussianPoetryScansionTool
Detection of poetic meter, rhyme, and stress placement in the texts of Russian accentual-syllabic poems and songs.
Install / Use
/learn @RussianNLP/RussianPoetryScansionToolREADME
RussianPoetryScansionTool
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 у возвращенного объекта выводит текст стихотворения с расставленными основными ударениями
после подгонки под метр.
Related Skills
node-connect
349.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
