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, которые ищут простой
    и открытый стандарт разметки.

Где взять?

Заключение

Язык VML создавался не как абстрактный стандарт, а как рабочий инструмент. Он уже прошёл проверку на реальном корпусе и доказал свою эффективность. Если вы занимаетесь поэзией в цифровой среде, попробуйте VML — это займёт всего несколько минут, а структурированные данные откроют перед вами новые возможности для анализа и исследований.

Вопросы, предложения, критика — приветствуются в issues на GitHub. Чем больше людей будет использовать VML, тем лучше станет и сам язык, и инструменты вокруг него.

Борис Орехов

Я занимаюсь научными исследованиями и иногда говорю про них в популярном жанре. Еще я пишу код, как полезный, так и развлекательный. https://nevmenandr.github.io/