Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Уникализатор / синонимайзер
Новая тема
Ответить
цитата
17/02/15 в 00:42
Lexikon
У меня есть исходное предложение, которое нужно уникализировать.
Исходник:
Цитата:
У меня (есть|имеется|записано) (исходное|начальное|стартовое) предложение, которое нужно (уникализировать|синонимизировать|сделать уникальным|переделать).
Подскажите, каким образом можно рандомно выбрать одно из слов дампа в скобках и поставить это слово вместо дампа (без скобок разумеется).
Предполагаю, что тут не без регулярки.
Вообще картина примерно такая:
регуляркой получаем что будет в скобках, затем explode() создаем массив, перемешиваем его и возвращаем один из элементов массива, но вот что-то в голове не укладывается как это сделать так чтоб все осталось на своих местах.
цитата
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
Я вот так сделал
Код:
<?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, но что-то не пытался вникнуть как оно там работает
поэтому стал писать другое
Новая тема
Ответить
Эта страница в полной версии