Как заменить слова в тексте на синонимы?

solomon-p

Новичок
Как заменить слова в тексте на синонимы?

Помогите, пожалуйста, если кто может.
Сам я школьник, так что прошу строго не ругать, если такое уже встречалось. Значит, пишу я такой скрипт - защита гостевой от ругательных и матерных слов. Хочу сделать, чтобы для каждого заменяемого плохого слова был свой нормальный синоним. Для этого постепенно будет составляться текстовой файл (база) вида:

плохое_слово_1 = хорошее_слово_1
плохое_слово_2 = хорошее_слово_2
...
плохое_слово_n = хорошее_слово_n

С самой базой слов проблем не будет - слова будут оперативно добавляться, а вот именно с самим скриптом непонятно как его сделать.

То есть общий алгоритм я представляю:
- предложение делится на слова;
- каждое слово берется и сравнивается с имеющимися в базе;
- если оно там присутствует, то вместо него записывается хорошее слово;
и всё.

Но вот не могу придумать алгоритм, который бы брал из этого текстового файла слово и подставлял бы вместо него другое.
Базу хочу сделать именно в виде текстового файла, чтобы любой мог туда дописать свои новые слова.
Может кто-нибудь подскажет решение? Я чувствую, что это не сложно, но сам еще не могу такое написать...
 

Zetruger

ivan.chistyakov.name
ага приколько получится

$search = $array(
'х**',
'п*****',
'...',
);

$replace = $array(
'орган',
'капут',
'...',
);

//вариент 1
$text = str_ireplace($search, $replace, $text); // PHP 5

//вариент 2
$text = str_replace($search, $replace, $text); // PHP 4
только будет чувствительность к регистру букв

//вариент 3
foreach ($search as $k=>$v) $search[$k] = '~' . preg_quote($v) . '~i';
$text = preg_replace($search, $replace, $text);


токо учти если скрипт будет работать под линукс нужно будет убедиться что правильно выставлена locale (функ. setlocale)

иначе будут проблемы с регистром в русских буквах
 

Alexandre

PHPПенсионер
для объема до 1000 слов данный алгоритм вполне подходит, массивы более 1000 элементов - будут есть много памяти.
 

Zetruger

ivan.chistyakov.name
Автор оригинала: Alexandre
для объема до 1000 слов данный алгоритм вполне подходит, массивы более 1000 элементов - будут есть много памяти.
вы делали замеры?
если изменения производить до запросе INSERT, а не после каждого SELECT, то все будет OK
 

Духовность™

Продвинутый новичок
Не понятен смысл этого.

Пишу я в гостевую тебе: "Соломон, ты е***ый м**ак".
Ты это заменяешь на "Соломон, ты траханый редиска"?

:D
 

solomon-p

Новичок
Автор оригинала: triumvirat
Не понятен смысл этого.

Пишу я в гостевую тебе: "Соломон, ты е***ый м**ак".
Ты это заменяешь на "Соломон, ты траханый редиска"?

:D
:) ну ты шутник :)

Можно ведь и так:

Пишешь ты мне в гостевую : "Соломон, ты е***ый м**ак".
А я это заменяю на "Соломон, ты нехороший человек"
или вобще: "Соломон, ты классный пацан"

То есть здесь все будет зависит от имеющейся базы.

Весь вопрос в другом - база уже около 3х тысяч слов собралась (и это только начало), а переписывать все слова в код не получится - как тут быть?
 

Alexandre

PHPПенсионер
Zetruger имеется ввиду
$search = $array(
'х**',
'п*****',
'...',
);
массив более 1000 элементов, это не очень хорошо,
замеры делал...при больших нагрузках - не эффективно.
но для 30 чел в день, вполне потянет
 

solomon-p

Новичок
Автор оригинала: triumvirat
ну тогда надо испел ставить или что-то типа того, что бы прога умела склонять
А можно подробнее про испел (или что-то типа того)?

А для чего проге уметь склонять? Все "нехорошие слова" записываются вручную - со всеми склонениями, падежами и т.д. Уже насобиралось три тысячи слов. А вообще таких слов не очень-то и много - в основном производные от них. То есть я вообще рассчитываю, что их будет не более 10 тысяч в базе.
 

Zetruger

ivan.chistyakov.name
solomon-p
слушай а ты не дашь взглянуть на твою базу, а то очень интересно, можт какие-то слова новые узнаю =)

Alexandre
оптимизация возможна! оптимизация безгранична...
 
Сверху