@Medvedoc

Как по умному доработать синонимайзер, написанный на PHP?

Здравствуйте! Нашел в просторах интернета примерный код синонимайзера. Немного доработал его, но несколько проблем осталось.
Если например в базе синонимов есть слово телефон и слово он, то при синонимизации в слове телефон последние две буквы меняются, поскольку окончание он воспринимается видимо как слово. Как это можно обойти?
И вторая проблема - не знаю как лучше сделать синонимизацию. Если в словаре мало слов, то она нормально проходит. Но если слов становится больше, то синонимизация не работает на всю глубину существующих синонимов на одно слово.

Проверка проводилась на банальной фразе Мобильный телефон 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
  • Вопрос задан
  • 624 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽