Реклама на сайте Advertise with us

Уникализатор / синонимайзер

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 17/02/15 в 00:42       Ответить с цитатойцитата 

У меня есть исходное предложение, которое нужно уникализировать.
Исходник:
Цитата:
У меня (есть|имеется|записано) (исходное|начальное|стартовое) предложение, которое нужно (уникализировать|синонимизировать|сделать уникальным|переделать).


Подскажите, каким образом можно рандомно выбрать одно из слов дампа в скобках и поставить это слово вместо дампа (без скобок разумеется).

Предполагаю, что тут не без регулярки.
Вообще картина примерно такая:
регуляркой получаем что будет в скобках, затем explode() создаем массив, перемешиваем его и возвращаем один из элементов массива, но вот что-то в голове не укладывается как это сделать так чтоб все осталось на своих местах. icon_confused.gif

0
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 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>";

?>

0
 



С нами с 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))

6
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 17/02/15 в 12:13       Ответить с цитатойцитата 

http://php.net/manual/ru/function.preg-replace-callback.php

Код: http://mrkto.com/synonimizer_php/

Тока шаблон я взял бы у Mika:

Код:

echo preg_replace_callback('/\([^)]+?\)/xs', "random_words", $s);

function random_words($m)
{
   $ar = explode("|", $m[1]);
   return $ar[array_rand($ar, 1)];
}

8
 

Люблю то, что делаю!

С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418


Передовик Master-X (16.12.2014) Передовик Master-X (16.02.2017) Передовик Master-X (01.03.2017) Передовик Master-X (16.03.2017) Передовик Master-X (01.09.2017) Ветеран трепа Master-X (16.09.2017)
Ссылка на сообщениеДобавлено: 17/02/15 в 12:32       Ответить с цитатойцитата 

Я вот так сделал icon_smile.gif

Код:

<?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, но что-то не пытался вникнуть как оно там работает icon_rolleyes.gif
поэтому стал писать другое icon_smile.gif

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »