chelkaz
@chelkaz

Как ускорить генерацию через перебор?

Мне нужно получить уникальные строки и засунуть в базу. Сейчас делаю на PHP, но это сверх долго...
Может я не так делаю логически?
Вот пример шаблона строки {Как {сделать|сгенерировать} эту строку {разной|непохожей} из нескольких слов}
Это часто используют для анкоров. Но для большого абзаца это страшно виснет.
Может есть что поумнее? Или на питоне например?
Я делаю так: Но он постоянно возвращает много повторов...

$text = "{Как {сделать|сгенерировать} эту строку {разной|непохожей} из нескольких слов}";
function textGenerator( $text ) {
            if ( preg_match( "/^(.*)\{([^\{\}]+)\}(.*)$/isU", $text, $matches ) ) {
                $p = explode( '|', $matches[2] );
                foreach ( $p as $comb ) textGenerator( $matches[1].$comb.$matches[3] );
            } else {
                echo $word.PHP_EOL;
                Condition::firstOrCreate(['name' => $word]); // Тут загоняю в базу
            }
        }
        textGenerator($text);

Небольшой абзац он мне забил в базу 17 миллионов строк, где большенство повторов.
Может есть готовые пакеты, классы для таких целей?
А то что сейчас он через какое то время начинает возвращать одно и тоже...
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
забил в базу 17 миллионов строк, где большенство повторов

мне бы столько терпения...или упорства.

Рекурсия с регуляркой и вставкой в базу.
Это просто к-к-к-комбо по времени выполнения.
Ничего дольше для выполнения придумать просто нельзя.

Ну а повторы отсекать в базе надо, раз в скрипте не получается.

Вот изучайте
https://github.com/neveldo/TextGenerator
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы