Spintax на примере
Быстрее всего понять spintax — увидеть, как готовый текст становится шаблоном. Поэтому мы взяли настоящий абзац — блок О Spintax с нашей же главной — и разметили его по шагам, ровно как описано в гайде по обратному факторингу. Каждая конструкция ниже покрашена так же, как её красят наши расширения для редакторов; каждый шаг ведёт в свой гайд.
Готовый текст
Обратный факторинг начинается с текста, которым вы уже довольны, — разметку добавляем последней. Вот одно предложение источника — те же слова, что в блоке О Spintax:
Spintax — это наш собственный язык шаблонов для создания множества по-настоящему уникальных вариаций текста из одного источника, который вы контролируете.
Ниже мы не придумываем новых слов — только размечаем выборы, которые у автора уже были в голове.
1. Словарь выборов
Прежде чем трогать предложение, объявите переиспользуемые слова один раз. #set перекатывается при каждом употреблении; #def катится один раз и запоминается (чтобы число и его существительное были согласованы). Поправите строку здесь — изменится каждое предложение, где она используется.
#set %UniqueGen% = {по-настоящему уникальных|неповторимых|по-настоящему разных}
#set %Engine% = {движок|spintax-движок|рендерер}
#def %pages% = {1|3|48}
2. Меняем слова и целые клаузы
Базовый оператор — {a|b|c}. Разрезайте наименьший отличающийся фрагмент — одно слово — либо целую вводную клаузу, всегда оставляя общий хвост за пределами разреза, чтобы грамматика не рассинхронилась.
Spintax {(spin syntax)|, «spin syntax»,} — это %OwnLang% для создания множества %UniqueGen% вариаций текста.
Различается только вставка в скобках — её и разрезаем; общее Spintax…это остаётся снаружи. Разрезать целиком {Spintax…это|Spintax…это} значило бы дублировать неизменное и провоцировать рассинхрон.
Полный гайд: Грамматически безопасная синонимизация →
3. Выбираем и переставляем
Перестановка [<…> a|b|c] берёт случайное подмножество и тасует порядок — вариативности куда больше, чем от стопки синонимов. Здесь список фич берёт по 3–6 пунктов за рендер; список движков сохраняет все четыре, но переставляет (minsize=maxsize=4).
Он добавляет [<minsize=3;maxsize=6;sep=", ";lastsep=" и "> перестановки|переменные|условия|согласование с числом|include|постобработку].
… для [<minsize=4;maxsize=4;sep=", ";lastsep=" и "> JavaScript|PHP|Python|Object Pascal]
4. Ветвимся по значению
Условие {?VAR?тогда|иначе} выбирает по значению переменной, а не случайно. Переключите один #def — и целая клауза меняется целиком.
#def %ai% = {да|}
… {?ai?Пусть ИИ соберёт шаблон один раз|Напишите шаблон вручную}; дальше %Engine% рендерит сколько угодно вариантов.
5. Согласуемся с числом
{plural %n%: одна|две|пять} подбирает нужную форму существительного под число. Русский — трёхформный: 1 страницу, 3 страницы, 48 страниц. Так как %pages% — это #def, число и форма всегда совпадают, и плюрал спокойно вкладывается в перестановку.
на [<minsize=1;maxsize=3;sep=", ";lastsep=" или "> %pages% {plural %pages%: страницу|страницы|страниц}|десятки сайтов|разные локали]
Даёт 1 страницу, 3 страницы, 48 страниц — никогда «1 страниц». Полный гайд: Плюралы →
6. Склоняем по падежам
Английскому хватает одной формы существительного, русскому — нет. Существительное, которое встречается в нескольких падежах, становится падежной семьёй — по одному #def на форму, по одному слову (никаких списков синонимов, иначе формы перекатятся вразнобой):
#def %BrandGen% = магазина
#def %BrandDat% = магазину
#def %BrandPrep% = магазине
Дальше каждый предлог связывает свой падеж в одной ветке: об этом %BrandPrep%, для %BrandGen%, к %BrandDat% — и на выходе «…об этом магазине… для магазина… к магазину». Полный гайд: Русские падежи →
Шаблон целиком
#set %OwnLang% = {наш собственный язык шаблонов|разметка, которую мы сделали|наш язык шаблонов}
#set %UniqueGen% = {по-настоящему уникальных|по-настоящему разных|неповторимых}
#set %UniqueAcc% = {уникальный|по-настоящему разный|неповторимый}
#set %Engine% = {движок|spintax-движок|рендерер}
#set %N% = {сотни|тысячи|миллионы}
#def %ai% = {да|}
#def %pages% = {1|3|48}
#def %BrandGen% = магазина
#def %BrandDat% = магазину
#def %BrandPrep% = магазине
<p>Spintax {(spin syntax)|, «spin syntax»,} — это %OwnLang% для создания множества %UniqueGen% вариаций текста из одного источника, который вы контролируете. Вы пишете один шаблон, который кодирует [<minsize=4;maxsize=4;sep=", ";lastsep=" и "> альтернативы|порядок|условия|переменные], а %Engine% разворачивает его в %N% вариантов.</p>
<p>{Расскажите ИИ об этом %BrandPrep%|Опишите преимущества %BrandGen%} — и %Engine% соберёт сотни описаний {для %BrandGen%|под витрину %BrandGen%}, ведя посетителя к %BrandDat%.</p>
<p>Так вы раскатываете %UniqueAcc% контент на [<minsize=1;maxsize=3;sep=", ";lastsep=" или "> %pages% {plural %pages%: страницу|страницы|страниц}|десятки сайтов|разные локали] — уникальный по построению.</p>
<p>{И он работает везде|Он запускается где угодно}: четыре независимых реализации с открытым кодом — для [<minsize=4;maxsize=4;sep=", ";lastsep=" и "> JavaScript|PHP|Python|Object Pascal].</p>
Как покрашено (те же scope-категории, что в наших расширениях для редакторов):
#setдиректива (#set / #def){a|b}альтернатива {a|b}[<…>]перестановка [<…> a|b]%VAR%переменная %VAR%{?…}условие {?…}{plural}плюрал {plural …}
Откроет песочницу с этим шаблоном — жмите Generate для бесконечных вариантов вживую или правьте.
Три настоящих рендера
Один шаблон — три разных текста, реальный вывод @spintax/core на фиксированных сидах. Видно, как переключается условие, согласуется число и переставляются списки.
Spintax (spin syntax) — это наш собственный язык шаблонов для создания множества по-настоящему уникальных вариаций текста из одного источника, который вы контролируете. Вы пишете один шаблон, который кодирует переменные, порядок, альтернативы и условия, а spintax-движок разворачивает его в миллионы вариантов.
Опишите преимущества магазина — и spintax-движок соберёт сотни описаний под витрину магазина, ведя посетителя к магазину.
Так вы раскатываете неповторимый контент на десятки сайтов или 1 страницу — уникальный по построению.
И он работает везде: четыре независимых реализации с открытым кодом — для JavaScript, PHP, Object Pascal и Python.
Spintax, «spin syntax», — это разметка, которую мы сделали для создания множества неповторимых вариаций текста из одного источника, который вы контролируете. Вы пишете один шаблон, который кодирует переменные, порядок, альтернативы и условия, а spintax-движок разворачивает его в тысячи вариантов.
Расскажите ИИ об этом магазине — и рендерер соберёт сотни описаний для магазина, ведя посетителя к магазину.
Так вы раскатываете неповторимый контент на десятки сайтов, разные локали или 3 страницы — уникальный по построению.
И он работает везде: четыре независимых реализации с открытым кодом — для JavaScript, Python, Object Pascal и PHP.
Spintax (spin syntax) — это наш язык шаблонов для создания множества неповторимых вариаций текста из одного источника, который вы контролируете. Вы пишете один шаблон, который кодирует переменные, порядок, альтернативы и условия, а движок разворачивает его в тысячи вариантов.
Опишите преимущества магазина — и spintax-движок соберёт сотни описаний для магазина, ведя посетителя к магазину.
Так вы раскатываете неповторимый контент на 48 страниц — уникальный по построению.
И он работает везде: четыре независимых реализации с открытым кодом — для JavaScript, PHP, Object Pascal и Python.
Такая же подсветка в твоём редакторе
Цвета выше — это грамматика, которую мы поставляем как расширения для редакторов; поставь её, и твои шаблоны подсветятся так же: VS Code (301st.spintax) или Sublime Text (Package Control: Spintax).
Куда дальше
- Открыть песочницу и вставить свой готовый текст для факторинга.
- Серия гайдов — каждый приём выше, в глубину.
- Справочник синтаксиса и вложенный spintax.
- Запусти где угодно — четыре движка с открытым кодом.