VML: язык разметки для стихов
Когда филолог встречается с программистом, разговор часто упирается в данные. Филолог хочет сохранить смысл, структуру и красоту текста. Программист хочет, чтобы эти данные можно было обработать, разобрать и измерить. Для прозы есть разметка TEI, для научных статей — LaTeX, для веба — HTML. А для стихов?
Обычно стихотворный текст в цифровом виде — это просто набор строк в текстовом файле. Но если мы хотим автоматически находить автора, заглавие, эпиграф, дату написания, строфы или метрический размер, простой текст бесполезен. В нём всё смешано.
Я разработал VML (Verse Markup Language) — язык разметки, который превращает неструктурированный поэтический текст в машиночитаемую структуру, оставаясь при этом лёгким и понятным для человека. Это не очередной XML-монстр и не JSON, который пугает гуманитариев. Это текстовый формат с короткими тегами и жёсткой, но интуитивной иерархией.
VML уже используется в реальном проекте — Башкирском поэтическом корпусе (http://web-corpora.net/bashcorpus/), который включает более 10 000 стихотворений. На основе этого корпуса вышла монография (Орехов, 2019) и ряд статей по квантитативной стиховедении.
Как это выглядит?
Вот минимальный документ на VML:
<a> Александр Пушкин <&> Я вас любил: любовь еще, быть может, В душе моей угасла не совсем; Но пусть она вас больше не тревожит; Я не хочу печалить вас ничем.
Всё просто:
- <a> — автор. Он действует до следующего тега автора.
- <&> — первая строка стихотворения (инципит). Это обязательный тег, без него документ невалиден.
Уже из этого примера можно извлечь автора, первую строку и список стихотворных строк.
Их можно посчитать, сравнить, проанализировать.
Добавляем структуру
Стихотворение редко бывает просто строкой за строкой. У него есть заглавие, эпиграф, строфы.
- <rm> — прозаическая вставка (эпиграф, посвящение, ремарка). Каждая строка требует отдельного тега.
- <*> — начало строфы. Строфы отделяются друг от друга повторением тега.
Стихотворные циклы
Если несколько стихотворений объединены общим замыслом, их можно поместить в цикл:
<nn> Стихи о Прекрасной Даме <n> Вступление <&> Отдых напрасен. Дорога крута. Вечер прекрасен. Стучу в ворота. <n> Второе стихотворение <&> Вхожу я в храм и совершаю... </nn>
Тег <nn> … </nn> обозначает цикл. Внутри него могут находиться
несколько стихотворений, каждое со своим заглавием (<n>) и инципитом.
Что делать, если эпиграф между стихами?
Представьте: два стихотворения подряд, и у второго перед инципитом есть эпиграф. Как не прикрепить эпиграф к первому стихотворению? В VML для этого есть тег <&&> — явное начало нового стихотворения до инципита.
Для исследователей стиха: метрика
Если вы занимаетесь стиховедением, вам может понадобиться явная разметка метрического размера. VML поддерживает четыре системы стихосложения:
- Силлабическую —
<m-S12>(12-сложник) - Силлабо-тоническую —
<m-RЯ4м>(четырёхстопный ямб с мужской клаузулой) - Тоническую —
<m-A*2*2*1>(ударный, 2 безударных, ударный, 2 безударных, ударный, 1 безударный) - Силлабо-метрическую (античную) —
<m-M*2*1*>
Пример:
<m-RЯ4ж> Мой дядя самых честных правил, <m-RЯ4м> Когда не в шутку занемог...
«Лесенка» Маяковского
Ступенчатая запись стиха, которую ввёл Маяковский, тоже поддерживается. Тег <l-NUM> обозначает уровень отступа.
Я волком бы <l-2> выгрыз <l-3> бюрократизм.
Инструменты
В репозитории VML есть два готовых инструмента на Python:
- Валидатор (
vml_validator.py) — проверяет синтаксис, иерархию вложенности, экранирование служебных последовательностей. - Счётчик (
vml_counter.py) — выдаёт статистику: количество авторов, стихотворений, строк, циклов.
Запуск:
python vml_validator.py poem.txt python vml_counter.py poem.txt
Почему VML, а не что-то ещё?
Сравним с существующими форматами:
- TEI — мощный, но громоздкий. Чтобы разместить одно стихотворение, нужно написать десятки строк XML. Для корпусного анализа избыточно.
- JSON — отлично для машин, но плохо читается человеком. Филолог вряд ли захочет править JSON вручную.
- Markdown — хорош для документации, но не для строгой разметки метаданных и иерархии.
VML — это золотая середина. Он достаточно строг, чтобы его можно было парсить автоматически, но достаточно лёгок, чтобы его мог использовать филолог без специальной подготовки. Теги короткие, структура интуитивна, а обучение занимает 5–10 минут.
Для кого это?
- Для филологов, которые хотят собрать свой поэтический корпус, но не хотят изучать XML/JSON.
- Для разработчиков, которым нужно извлекать из стихов метаданные
для NLP-задач (автор, дата, метр, строфика). - Для энтузиастов Digital Humanities, которые ищут простой
и открытый стандарт разметки.
Где взять?
- Полная спецификация — https://github.com/nevmenandr/VML/blob/main/README.md
- Репозиторий с кодом и примерами —https://github.com/nevmenandr/VML
- DOI —10.5281/zenodo.20100191
- Лицензия — Apache 2.0 (свободное использование, модификация и распространение, включая коммерческое применение)
Заключение
Язык VML создавался не как абстрактный стандарт, а как рабочий инструмент. Он уже прошёл проверку на реальном корпусе и доказал свою эффективность. Если вы занимаетесь поэзией в цифровой среде, попробуйте VML — это займёт всего несколько минут, а структурированные данные откроют перед вами новые возможности для анализа и исследований.
Вопросы, предложения, критика — приветствуются в issues на GitHub. Чем больше людей будет использовать VML, тем лучше станет и сам язык, и инструменты вокруг него.
