Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Уникализатор / синонимайзер
цитата
17/02/15 в 00:42
 Lexikon
У меня есть исходное предложение, которое нужно уникализировать.
Исходник:
Цитата:
У меня (есть|имеется|записано) (исходное|начальное|стартовое) предложение, которое нужно (уникализировать|синонимизировать|сделать уникальным|переделать).


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

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

Код:

<?php

header("Content-Type: text/html; charset=UTF-8");

$ishodStr = "У меня (есть|имеется|записано) (исходное|начальное|стартовое) предложение, которое нужно (уникализировать|синонимизировать|сделать уникальным|переделать)";

preg_match_all("/\((.*)\)/iU", $ishodStr, $matches);

echo "<pre>";
print_r($matches);
echo "</pre>";

?>
цитата
17/02/15 в 01:45
 Mika
Не знаю на счет пхп, но в питоне функция замены в регэкспах в качестве параметра может принимать функцию, поэтому то что тебе требуется можно записать так:
Код:
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))
цитата
17/02/15 в 12:13
 Alexandur
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)];
}
цитата
17/02/15 в 12:32
 Lexikon
Я вот так сделал 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


Эта страница в полной версии