Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 17/02/15 в 00:42 |
У меня есть исходное предложение, которое нужно уникализировать.
Исходник:
Цитата: | У меня (есть|имеется|записано) (исходное|начальное|стартовое) предложение, которое нужно (уникализировать|синонимизировать|сделать уникальным|переделать). |
Подскажите, каким образом можно рандомно выбрать одно из слов дампа в скобках и поставить это слово вместо дампа (без скобок разумеется).
Предполагаю, что тут не без регулярки.
Вообще картина примерно такая:
регуляркой получаем что будет в скобках, затем explode() создаем массив, перемешиваем его и возвращаем один из элементов массива, но вот что-то в голове не укладывается как это сделать так чтоб все осталось на своих местах.
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 17/02/15 в 00:54 |
Этим кодом я вытаскиваю все то что находиться в скобках
Код: |
<?php
header("Content-Type: text/html; charset=UTF-8");
$ishodStr = "У меня (есть|имеется|записано) (исходное|начальное|стартовое) предложение, которое нужно (уникализировать|синонимизировать|сделать уникальным|переделать)";
preg_match_all("/\((.*)\)/iU", $ishodStr, $matches);
echo "<pre>";
print_r($matches);
echo "</pre>";
?>
|
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 17/02/15 в 01:45 |
Не знаю на счет пхп, но в питоне функция замены в регэкспах в качестве параметра может принимать функцию, поэтому то что тебе требуется можно записать так:
Код: | import re
import random
def random_word(match):
return random.choice(match.group(1)[1:-1].split('|'))
text = "У меня (есть|имеется|записано) (исходное|начальное|стартовое) предложение, которое нужно (уникализировать|синонимизировать|сделать уникальным|переделать)"
print(re.sub('(\([^)]+?\))', random_word , text))
|
или еще короче
Код: | import re
import random
print(re.sub('(\([^)]+?\))', lambda x: random.choice(x.group(1)[1:-1].split('|')), text)) |
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 17/02/15 в 12:13 |
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 17/02/15 в 12:32 |
Я вот так сделал
Код: |
<?php
header("Content-Type: text/html; charset=UTF-8");
$ishodStr = "У меня (есть|имеется|записано) (исходное|начальное|стартовое) предложение, которое нужно (уникализировать|синонимизировать|сделать уникальным|переделать).";
preg_match_all("/\((.*)\)/iU", $ishodStr, $regs);
foreach ($regs[1] as $keyArr => $dumpKeywords) {
$numb = $keyArr + 1;
$arrKeywords = explode("|", $dumpKeywords);
shuffle($arrKeywords);
$randKeys = array_rand($arrKeywords, 1);
$randomKeyword = $arrKeywords[$randKeys];
$ishodStr = str_replace($regs[0][$numb-1], $randomKeyword, $ishodStr);
}
echo $ishodStr."<br />";
?>
|
я смотрел на callback, но что-то не пытался вникнуть как оно там работает
поэтому стал писать другое
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |