Генератор текстов / множитель статей на PHP

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

В интернете есть масса сервисов, позволяющих, введя синонимы для различных слов и выражений, сгенерировать случайный вариант текста. Примеры таких сервисов: 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();
}

2 комментария

  • Ответить Иван |

    Здравствуйте!

    Прочел вашу статью о генераторе текстов.
    У вас в примере вывод сделан так:
    //Сформируем 100 случайных вариантов текста:
    for($i=0;$igetRandomVariant();
    }
    Пробовал echo с разными значениями но так и не смог вывести результат, подскажите, как отобразить его на сайте?

    И еще, у вас вывод в случайном порядке, можно сделать вывод таким, чтобы он был по порядку?

    В идеале хотелось бы иметь возможность узнать кол-во результатов, к примеру,
    500 и дальше выводить от 1 до 30, от 78 до 350 и т.д.
    Т.е. иметь возможность выводить конкретный результат, чтобы не сохранять все варианты текстов в базу данных.

    Помогите, пожалуйста.

    • Ответить mihanentalpo |

      Привет.
      1) Если вместо $randomTextVariant[$i] = $combineMorph->getRandomVariant(); написать echo $combineMorph->getRandomVariant(); — то вариант будет выводиться на экран
      2) Количество вариантов узнать можно с помощью $combineMorph->getVariantsCount();
      3) А вот вывести конкретные варианты, к сожалению, нельзя. Я сам хотел сделать такой функционал, но времени на реализацию было не много, поэтому не допилил его.
      Проблема с ним в том, что исходный фрагмент текста при анализе превращается в дерево вариантов, и для построения списка из всех вариантов нужно написать алгоритм рекурсивного обхода этого дерева с выбором последовательно каждого ветвления, для получения всех их сочетаний.
      Если дерзнёшь доработать мой модуль таким образом — могу попробовать подсказать и помочь, а сам я на такую доработку время найду не скоро

Оставить комментарий