public function synonimize(){
$str = 'Кроткий и квелый карлик Андрюха качнулся и кинулся на Андриана, что он не работает';
$words = $this->getWords();
$result = $this->getRandomText($str, $words);
dd($result);
}
protected function getRandomText($str, $words){
mb_internal_encoding("UTF-8");
$repl_array = $words;
$keys = array_map(function($key){
return '#'.$key.'#ui';
}, $repl_array);
foreach ($keys as $i=>$key) {
$str = preg_replace_callback($key, function ($match) use ($repl_array, $i) {
$syns = explode('|', $repl_array[$i]);
array_splice($syns, array_search(mb_strtolower($match[0]), array_map('mb_strtolower', $syns)), 1);
return $syns[rand(0, count($syns) - 1)];
}, $str);
}
return $str;
}
protected function getWords(){
$arr = [
"Fora|фора",
"Ford|форд",
"General motors|дженерал моторс",
"Google|гугл",
"Hand|хэнд",
"Hi-tech|хай-тек",
"Homo sapiens|человек разумный",
"Hyundai|хэндэ",
"Ip-адрес|айпишник",
"Ясного представления|четкого понятия",
"Ясное понятие|четкое представление",
"Ясное представление|четкое понятие",
"Ясному представлению|четкому понятию",
.........
и еще много строк
];
return $arr;
}
на пк если запустить такой скрипт то комп очень долго думает возможно например етот код залить на VPS сервак чтобы он быстро ответ давал, или что-то еще чтобы ускорить работу foreach?
Если вы хотите в искомой фразе повставлять рандомные синонимы, то вам нужно менять алгоритм.
Самое простое, что можно придумать:
В коде первый пункт выглядит как-то так
function getWords() {
$res = [
'words' => [],
'syns' => [
['Fora', 'фора'],
['Ford', 'форд'],
['General motors', 'дженерал моторс'],
['Google', 'гугл'],
['Homo sapiens', 'человек разумный'],
]
];
foreach ($res['syns'] as $idx => &$set) {
foreach ($set as &$syn) {
$syn = mb_strtolower($syn);
$words = explode(' ', $syn);
$word = $words[0];
if (!isset($res['words'][$word]))
$res['words'][$word] = [];
$res['words'][$word][] = [
'phrase' => $words,
'idx' => $idx
];
}
}
return $res;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как получить значение тега <category> и записать его в масив?
Не работает запрос UPDATE, данные не изменяютсяПеременные существуют, через echo проверял, подключение к базе данных тоже, другие запросы выполняются