Иногда нужно создать десятки, сотни и тысячи текстов, которые будут иметь один и тот же смысл, но отличаться по содержанию.
В интернете есть масса сервисов, позволяющих, введя синонимы для различных слов и выражений, сгенерировать случайный вариант текста. Примеры таких сервисов: http://www.linksfarm.ru/pages/226, http://www.seogenerator.ru/tools/.
Краткая суть в том, что указывая {разные|различные} {варианты|способы написания} в [вот|таком] виде, {можно|есть возможность} {получить|создать|сгенерировать} {различные|разнообразные} {варианты|версии} написания {одного и того же |}текста.
Да, в Интернете есть сервисы, позволяющие генерировать такие случайные тексты из таких вот шаблонов, но что если нужен свой собственный?
Однажды мне понадобился такой генератор, и, за неимением существующего, а также, ввиду его простоты, я написал свой. Теперь делюсь им с общественностью.
Установка
Склонируем репозиторий https://github.com/MihanEntalpo/CombineMorph:
git clone https://github.com/MihanEntalpo/CombineMorph.git |
Использование
Создадим для примера файл index.php в папке рядом с репозиторием:
<?php //Подключаем файл класса require_once "./CombineMorph/CombineMorph.php"; //Текст из которого нужно получить варианты $text = "Краткая суть в том, что указывая {разные|различные} {варианты|способы написания} в [вот|таком] виде, {можно|есть возможность} {получить|создать|сгенерировать} {различные|разнообразные} {варианты|версии} написания {одного и того же |}текста."; //Создадим объект класса, передав в качестве параметра текст $combineMorph = new CombineMorph($text); //Получим количество возможных вариантов: $variantsCount = $combineMorph->getVariantsCount(); //Сформируем 100 случайных вариантов текста: for($i=0;$i<100;$i++) { $randomTextVariant[$i] = $combineMorph->getRandomVariant(); } |
Здравствуйте!
Прочел вашу статью о генераторе текстов.
У вас в примере вывод сделан так:
//Сформируем 100 случайных вариантов текста:
for($i=0;$igetRandomVariant();
}
Пробовал echo с разными значениями но так и не смог вывести результат, подскажите, как отобразить его на сайте?
И еще, у вас вывод в случайном порядке, можно сделать вывод таким, чтобы он был по порядку?
В идеале хотелось бы иметь возможность узнать кол-во результатов, к примеру,
500 и дальше выводить от 1 до 30, от 78 до 350 и т.д.
Т.е. иметь возможность выводить конкретный результат, чтобы не сохранять все варианты текстов в базу данных.
Помогите, пожалуйста.
Привет.
1) Если вместо $randomTextVariant[$i] = $combineMorph->getRandomVariant(); написать echo $combineMorph->getRandomVariant(); — то вариант будет выводиться на экран
2) Количество вариантов узнать можно с помощью $combineMorph->getVariantsCount();
3) А вот вывести конкретные варианты, к сожалению, нельзя. Я сам хотел сделать такой функционал, но времени на реализацию было не много, поэтому не допилил его.
Проблема с ним в том, что исходный фрагмент текста при анализе превращается в дерево вариантов, и для построения списка из всех вариантов нужно написать алгоритм рекурсивного обхода этого дерева с выбором последовательно каждого ветвления, для получения всех их сочетаний.
Если дерзнёшь доработать мой модуль таким образом — могу попробовать подсказать и помочь, а сам я на такую доработку время найду не скоро