Как по умному доработать синонимайзер, написанный на PHP? Здравствуйте! Нашел в просторах интернета примерный код синонимайзера. Немного доработал его, но несколько проблем осталось.
Если например в базе синонимов есть слово телефон и слово он, то при синонимизации в слове телефон последние две буквы меняются, поскольку окончание он воспринимается видимо как слово. Как это можно обойти?
И вторая проблема - не знаю как лучше сделать синонимизацию. Если в словаре мало слов, то она нормально проходит. Но если слов становится больше, то синонимизация не работает на всю глубину существующих синонимов на одно слово.
Проверка проводилась на банальной фразе Мобильный телефон Samsung. Обменяю на новый iphone.код синонимайзера:$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';
}
?>код базы:ты|он|сам|такой
крутой|деловой|навороченный|блатной
cотовый телефон|мобилка|cобильник|aага|nелефон|cотовый|мобильный телефонsamsung|Самсунг|LG|Nokia
новый|новенький|обновленный|хороший
обменяю|отдам|разменяю|поменяю|дам в размен
Iphone|Айфон|IP|Nokia 3210

21 Авг 2019 в 06:21
197 +1
0
Ответы
1

Для решения проблемы с окончаниями слов, необходимо изменить способ поиска и замены. Вместо использования регулярного выражения с символом #, можно использовать полноценное слово с пробелом до и после него, чтобы избежать замены последних букв. Например, вместо '#он#' использовать ' он '.

Для улучшения работы синонимайзера на более глубокие уровни синонимизации, рекомендуется изменить логику загрузки и хранения базы синонимов. Вместо файла можно использовать базу данных, где каждое слово будет связано с одним или несколькими синонимами. Также можно разделить базу на группы синонимов, чтобы увеличить глубину обработки.

Пример модифицированного кода:

function synonimize($str, $repl_array){
foreach ($repl_array as $words) {
$synonyms = explode('|', $words);
foreach ($synonyms as $synonym) {
$str = str_ireplace(" $synonym ", ' '. $synonyms[array_rand($synonyms)], $str);
}
}
echo ucfirst($str);
}
$repl_array2 = [
['ты|он|сам|такой'],
['крутой|деловой|навороченный|блатной'],
['сотовый телефон|мобилка|сотовый|мобильный телефон samsung|самсунг|lg|nokia'],
['новый|новенький|обновленный|хороший'],
['обменяю|отдам|разменяю|поменяю|дам в размен'],
['iphone|айфон|ip|nokia 3210']
];
$str2 = 'Мобильный телефон Samsung. Обменяю на новый iPhone.';
for ($x=0; $x<5; $x++) {
echo synonimize($str2, $repl_array2) . '<br>';
}

В этом коде используется двумерный массив для хранения синонимов по группам. Функция synonimize теперь проходит по каждой группе слов и заменяет каждое слово на случайный синоним из этой группы. Такой подход позволяет улучшить качество синонимизации и расширить базу слов.

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 471 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир