SPINTAX+. Новые возможности, все комбинации

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
upd 25.02.2018 04:48 - Добавлен проект по генерации одного случайного варианта. Доработано экранирование спец. символов.

Привет! Зная, как обитатели этого форума любят всевозможную уникализацию, решил поделиться с вами своим расширенным spintax'ом. В своё время я написал его ради интереса без необходимости в практическом применении, поэтому вчерашний день был потрачен, чтобы отряхнуть его от пыли и одеть в новый пиджачок.

Что нового?
  • Шаблон генерирует все возможные комбинации. Наверно, это самое важное. Полученный список уникален, а, значит, вероятность отработать один и тот же текст равна нулю.
  • Настройка количества слов при перестановках. Пока непонятно, подробнее будет ниже на примерах. Важность сравнима с первым пунктом.
  • Возможность использовать несколько разделителей, за счёт чего можно получить разные конструкции слов.


А теперь подробнее.

Генерация всех возможных комбинаций

Для этого достаточно выбрать разделитель во входных настройках и заполнить поле "Исходный текст".

Полученные варианты текста с заданным разделителем сохранятся в соответствующий файл в папке с шаблоном.


Количество слов в перестановках

Синтаксис расширенного spintax'а, думаю, вы все уже знаете(ссылка для тех, кто не знает). Я старался от него не отдалятся.
Пример:

[*1-2*+ +отличный|замечательный|великолепный|чудесный|несравненный|потрясающий]

*1-2* - количество слов в комбинации от 1го до 2х включительно. Параметр необязателен, при его отсутствии шаблон будет работать на максимальном числе слов.
+ + - в качестве 1го (в данном случае и единственного) разделителя выступает пробел.

Что в итоге?
В итоге мы получаем в сумме 36 вариантов с одним и двумя словами

потрясающий отличный
несравненный потрясающий
несравненный
великолепный несравненный
чудесный замечательный

...

Таким образом, если правильно подобрать синонимы, дополняющие друг друга, можно получить огромное количество вариантов без потери качества текста (или с минимальными потерями).


Несколько разделителей

Как я писал выше, очень ситуативная вещь эти разделители, но описать всё равно нужно. Сделаем это на примере.
[*2-6*+ и ++, ++, а также +красный|синий|чёрный|белый|зелёный|фиолетовый]
+ и + - разделитель между словами.
+, + - разделитель между группами слов.
+, а также + - разделитель для последнего слова. Работает только при нечётном количестве слов. Минимальное количество 3.

Какие конструкции имеем итоге?

красный и синий
красный и синий, а также чёрный
красный и чёрный, белый и фиолетовый
красный и белый, чёрный и зелёный, а также фиолетовый
фиолетовый и красный, синий и зелёный, чёрный и белый
...


Принцип, думаю, ясен. Все разделители необязательный для заполнения. Первый будет считаться пустотой в таком случае, второй и третий будут считаться не существующими и применяться не будут.


Экранирование

Спецсимволы "{", "[", "|", "]", "}", не участвующие в spintax'е, нужно экранировать: "\{", "\[", "\|", "\]", "\}". Если они уже заэкранированы и на выходе должны оставаться такими - следует добавить ещё слэш: "\\{", "\\[", "\\|", "\\]", "\\}"

Например, на входе: {1|\[\{2\|3\}\]}
На выходе:

1
[{2|3}]

На входе: {1|\\[\{2\|3\}\\]}
На выходе:
1
\[{2|3}\]

Спецсимвол "+" нужно экранировать только в разделителях.


Код был полностью переписан, алгоритмы изменены. Тесты удачные, но вдруг что не так - пишите.

И последнее. Комбинаторика может быть коварной. На одном числе слов шаб отрабатывает несколько секунд, вы решаете докинуть ещё несколько слов, вот только число комбинаций растёт в геометрической прогрессии и секунды могут превратиться в часы)
 
Категория
Полезно

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

Severip

Client
Регистрация
17.10.2013
Сообщения
348
Благодарностей
95
Баллы
28
4 вопроса:
1. Это получается расширенный вариант расширенного спинтакса с темже синтаксисом?
2. Можно по-подробнее про разделитель?
3. Есть ли возможность случайного отключения блоков? В том смысле, чтобы слово или словосочетание или фраза, случайным образом не показывались, просто опускались?
4. Как это все подрубить к своему шабу? Не вижу переменную на входе.
Спасибо.
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
4 вопроса:
1. Это получается расширенный вариант расширенного спинтакса с темже синтаксисом?
2. Можно по-подробнее про разделитель?
3. Есть ли возможность случайного отключения блоков? В том смысле, чтобы слово или словосочетание или фраза, случайным образом не показывались, просто опускались?
4. Как это все подрубить к своему шабу? Не вижу переменную на входе.
Спасибо.
1. Синтаксис тот же с дополнением.
2. Вставь пример с разделителями в шаблон и посмотри, что сгенерирует. Я просто не знаю, что именно непонятно, может есь более конкретный вопрос?
3. Не понял. На примере бы увидеть.
4. Это шаблон по генерации списка всех вариантов. Генерируешь список, подставляешь в свой шаб и работаешь с ним. Для генерации случайного варианта алгоритмы нужно менять. Может займусь этим позже
 

Severip

Client
Регистрация
17.10.2013
Сообщения
348
Благодарностей
95
Баллы
28
doc, вот пример: http://xbb.uz/randomizator/text.bb Там есть возможность опускать часть текста, чего нет у зенки.
Можно это как-то реализовать?

Подставлять список неудобно, хороший текст генерится из кучи разных блоков, которые меняются, дополняются, заново рандомятся в зависимости от параметров сайта или еще чего. Нужно, чтобы твой кубик вставал в любое место, получал на вход переменную и отдавал тоже переменную, но уже обработанную. Вот это будет то, что нужно. Можно так?
 
  • Спасибо
Реакции: Dr.Pipetka

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
doc, вот пример: http://xbb.uz/randomizator/text.bb Там есть возможность опускать часть текста, чего нет у зенки.
Можно это как-то реализовать?
если ты об это {|text}, то эта конструкция работает

Подставлять список неудобно, хороший текст генерится из кучи разных блоков, которые меняются, дополняются, заново рандомятся в зависимости от параметров сайта или еще чего. Нужно, чтобы твой кубик вставал в любое место, получал на вход переменную и отдавал тоже переменную, но уже обработанную. Вот это будет то, что нужно. Можно так?
будет позже. Но такой подход будет давать шанс использовать один и тот же текст повторно
 

Severip

Client
Регистрация
17.10.2013
Сообщения
348
Благодарностей
95
Баллы
28
Если переменная почистится, то каким образом будет повтор в следующем блоке?
Если внутри кубика, то при полной поддержке расширенного спинтакса повтор практически исключен, там рандомится очень много вариантов.
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
Если переменная почистится, то каким образом будет повтор в следующем блоке?
Если внутри кубика, то при полной поддержке расширенного спинтакса повтор практически исключен, там рандомится очень много вариантов.
неисповедимы пути рандома. "Парадокс дней рождение" заставляет на это посмотреть с другой стороны
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 403
Благодарностей
1 936
Баллы
113
рандом и комбинаторика это разные вещи
вы вообще о чём речь ведёте ?

@doc я шаблон не открывал но читая пост я понял что ты пытался сделать комбинаторику, но спинтакс это не комбинаторика
комбинаторика это где одно слово ни разу не повторяется
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 403
Благодарностей
1 936
Баллы
113
пример того что недавно человек на форуме хотел
из 12 месяцев собрать строки по три слова без повтора во всех строках
вот это комбинаторика

а такого рандома миллиард можно нахирачить
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
рандом и комбинаторика это разные вещи
вы вообще о чём речь ведёте ?

@doc я шаблон не открывал но читая пост я понял что ты пытался сделать комбинаторику, но спинтакс это не комбинаторика
комбинаторика это где одно слово ни разу не повторяется
Прежде чем утверждать что-то, стоит просто попробовать) Особенно когда это так доступно
Всего секунда затрат, а сколько пользы
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 403
Благодарностей
1 936
Баллы
113
Чтобы не выглядеть глупо, прежде чем утверждать что-то, стоит просто попробовать) Особенно когда это так доступно
Всего секунда затрат, а сколько пользы
а для чего пробывать ?
только если ты речь ведёшь о спинтаксе и показываешь результат в посте то это не комбинаторика
если в шабе у тебя вообще другое так может я грузить не хочу его а ты объясняешь скрытное

если секунда, покажи мне результат 12 месяцев по три слова
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
а для чего пробывать ?
только если ты речь ведёшь о спинтаксе и показываешь результат в посте то это не комбинаторика
если в шабе у тебя вообще другое так может я грузить не хочу его а ты объясняешь скрытное

если секунда, покажи мне результат 12 месяцев по три слова
Действительно, для чего пробовать. Лучше сказать что-то необоснованно)
Что же, ничего кроме как дать слово, что там есть алгоритмы комбинаторики, я ничего дать тебе не могу (при условии, что запустить шаблон на простом примере ты не хочешь)
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 403
Благодарностей
1 936
Баллы
113
вот например у меня код отрабатывает за секунды, из 10 месяцев всевозможные комбинации по три слова в строку, 11 так и не смог дождаться, жрёт проц мало

2018-02-25_083509.png


ты бы хоть скрин показал результата
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
вот например у меня код отрабатывает за секунды, из 10 месяцев всевозможные комбинации по три слова в строку, 11 так и не смог дождаться, жрёт проц мало

Посмотреть вложение 27606

ты бы хоть скрин показал результата
Пожалуйста)




Достаточно быстро выполнился?)
 

Вложения

  • 22,3 КБ Просмотры: 5 554
  • 16 КБ Просмотры: 5 515
  • Спасибо
Реакции: ssXXXss

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 403
Благодарностей
1 936
Баллы
113
немного не правильно сказал, из 10 месяцев я смог собрать в строку по 10 всевозможные комбинации а из 11-ти нет, но что я просил у тебя не спорю всё верно предоставил, тут моя ошибка изначально не правильно высказал

я не отпираюсь поверь, есть ветка даже где мы это обсуждали и экспериментировали, ты свой пробывал из 11 собрать ?
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
немного не правильно сказал, из 10 месяцев я смог собрать в строку по 10 всевозможные комбинации а из 11-ти нет, но что я просил у тебя не спорю всё верно предоставил, тут моя ошибка изначально не правильно высказал

я не отпираюсь поверь, есть ветка даже где мы это обсуждали и экспериментировали, ты свой пробывал из 11 собрать ?
я не думаю, что мне хватит оперативы)
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 403
Благодарностей
1 936
Баллы
113
я не думаю, что мне хватит оперативы)
я проверял на своих вариантах, если не записывать то во много раз быстрее выполняет
не пробывал с другими колекциями
хотел опробывать с булдером так руки не дошли так как мне оно не надо было, так чисто ради спортивного интереса пробывал )
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
честно открыл шаблон, чёт много кода ?
похож на это , но с охриненым сокращением
Посмотреть вложение 27609
возможно потому, что это не шаблон получения комбинаций последовательности, а несколько большее
я проверял на своих вариантах, если не записывать то во много раз быстрее выполняет
после раскрытия одних фигурных или квадратных скобок из одной строки появляется множество других, каждая из которых в свою очередь даст ещё множество других. Не хранить это дело нельзя
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 403
Благодарностей
1 936
Баллы
113
вот мой тест на 10, но я с цифрами
2018-02-25_090258.png


неплохо ? ))
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 403
Благодарностей
1 936
Баллы
113
вот 11 нифига не хочет составить всевозможные комбинации, ресурсов всего примерно %20-25 уходит но это под конец завышается
комп у меня 4 ядра 8 памяти
 

Nord

Client
Регистрация
22.03.2012
Сообщения
1 957
Благодарностей
992
Баллы
113
@doc а если текст для спинтакса полон символами "{", "[", "]", "}", как его лучше оформить? Они как то экранируются? Я всегда перед спинтаксом делал замену в тексте, допустим "{" на "~~~" а после обработки назад, а как-то без "костылей" это можно сделать?
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
@doc а если текст для спинтакса полон символами "{", "[", "]", "}", как его лучше оформить? Они как то экранируются? Я всегда перед спинтаксом делал замену в тексте, допустим "{" на "~~~" а после обработки назад, а как-то без "костылей" это можно сделать?
достаточно заэкранировать слэшем. Но на данный момент не предусмотрел |. Отосплюсь и залью правку
 
  • Спасибо
Реакции: Nord

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
Добавлен проект по генерации одного случайного варианта. Можно использовать как подпроект или просто экшн. Доработано экранирование спец. символов.
 
  • Спасибо
Реакции: udder и Severip

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
323
Благодарностей
37
Баллы
28
@doc
Привет, скажи пожалуйста, как вот эту конструкцию заставить корректно работать без шарпа?

у меня кубик просто спинтак встроенный,
есть текст к примеру -
Код:
Двери, окна, подоконники, ручки
Как написать спинтакс что бы он рандомно выбирал от 1 до 3 слов? типа двери окна или двери окна ручки ну или одно слово просто подоконники?

почему то вот эта конструкция странно работает - [*1-2*+ +отличный|замечательный|великолепный|чудесный|несравненный|потрясающий]
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
727
Благодарностей
50
Баллы
28
Как проще найти одинаковое в двух выражениях?
А точнее как превратить
Не раздумывайте, спрашивайте подробности!
Не раздумывайте, задавайте нам вопросы!
в
Не раздумывайте, {спрашивайте подробности|задавайте нам вопросы}!


?
 

doc

Client
Регистрация
30.03.2012
Сообщения
7 758
Благодарностей
3 842
Баллы
113
Как проще найти одинаковое в двух выражениях?
А точнее как превратить
Не раздумывайте, спрашивайте подробности!
Не раздумывайте, задавайте нам вопросы!
в
Не раздумывайте, {спрашивайте подробности|задавайте нам вопросы}!


?
Если предложения всегда одинаковы в начале - сравнивать посимвольно до тех пор, когда символы перестанут совпадать. с места несовпадения выделять подстроки и объединять их в конструкцию спинтакса.
Если предложения разнятся в начале и надо выискивать совпадение где-то в середине - тут всё намного сложнее, и возможный результат гораздо менее надёжный, ибо можно легко загубить смысл предложения
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
727
Благодарностей
50
Баллы
28
Не доделал и занялся основными делами, чтобы день зря не прошёл.

Незаконченный шаблончик у меня делает следующее:
1. То, что я собрал ручками кладёт в список, разделитель точка (в каждую строку кладётся одно предложение).
2. Берёт первое слово какой-нибудь строки в переменную Word.
3. Берёт подсписок, содержащий это слово. Если строк больше 1, начинает обрабатывать подсписок. Если строк не больше 1, кладёт в список Итоги.
4. Удаляет две строки в переменные и вставляет { и |:
Word {...
Word |...
5. Делает так
Если предложения ... всегда одинаковы в начале - сравнивать посимвольно до тех пор, когда символы перестанут совпадать. с места несовпадения выделять подстроки и объединять их в конструкцию спинтакса.
 

Вложения

Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)