Здравствуйте! Нашел в просторах интернета примерный код синонимайзера. Немного доработал его, но несколько проблем осталось.
Если например в базе синонимов есть слово
телефон и слово
он, то при синонимизации в слове
телефон последние две буквы меняются, поскольку окончание
он воспринимается видимо как слово. Как это можно обойти?
И вторая проблема - не знаю как лучше сделать синонимизацию. Если в словаре мало слов, то она нормально проходит. Но если слов становится больше, то синонимизация не работает на всю глубину существующих синонимов на одно слово.
Проверка проводилась на банальной фразе
Мобильный телефон Samsung. Обменяю на новый iphone.код синонимайзера:<?php
mb_internal_encoding("UTF-8");
function synonimize($str, $repl_array){
$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);
}
echo preg_replace_callback('~(?:^|\.\s*)\w~u', function($m) {
return mb_strtoupper($m[0]);
}, $str);
}
$str2 = $prefixes[mt_rand(0,count($prefixes)-1)]; //тут можно просто вставить сам текст
$repl_array2 = "dictionary.txt"; //база с синонимами
$repl_array3 = file($repl_array2);
for ($x=0; $x<5;$x++){
echo synonimize($str2,$repl_array3).'<br>';
}
?>
код базы:ты|он|сам|такой
крутой|деловой|навороченный|блатной
cотовый телефон|мобилка|cобильник|aага|nелефон|cотовый|мобильный телефонsamsung|Самсунг|LG|Nokia
новый|новенький|обновленный|хороший
обменяю|отдам|разменяю|поменяю|дам в размен
Iphone|Айфон|IP|Nokia 3210