Как сдалеть синонимайзер php ?

seosniks
На сайте с 13.08.2007
Offline
389
869

Привествую Васе кто заглянул в тему.

Вопрос такой как сделать синонимизацию текста с помощью php

Допустим есть синонимы просто пример

шел:бежал=полз=лез=тащился

плыл:греб=плавал=заплыл

поднимался:взбирался=карабкался

Как реализовать скриптик чтоб он находил слово корое назодиться до :

и брал рандомно любое слово из имеющихся с права.

Буду благодарен за пример или гжде почитать, с примерами.

Спасибо.

[Удален]
#1

ну если прям в таком грубом виде (пусть ваши строчки лежат построчно в файле syn.txt)


$Content="..";//то, в чем заменяем
$patterns=file('./syn.txt');
foreach ($patterns as $pattern)
{
$from=substr($pattern,0, strcspn($pattern,":"));
$to=explode("=",substr(strstr($pattern,":"),1));

$Content=str_ireplace($from,$to[rand(0,count($to))],$Content);

}

минус один - будут заменены все вхождения слова. Если нужно по одному, то можно воспользоваться preg_replace

MrPIT
На сайте с 23.07.2008
Offline
44
#2

Таким вариантом будут заменяться не слова а вхождения, то есть

если есть пара дом - коттедж

ТО слово Домодедово будет преобразовано в коттеджодедово =)

Мне кажется все довольно сложней это выглядит. Пользоваться регулярными выражениями. Вместо str_ireplace что-ниб типа:

preg_replace("/\b".$from."\b/i", $to[rand(0,count($to))], $Content);

[Удален]
#3
MrPIT:
Таким вариантом будут заменяться не слова а вхождения, то есть
если есть пара дом - коттедж
ТО слово Домодедово будет преобразовано в коттеджодедово =)

Мне кажется все довольно сложней это выглядит. Пользоваться регулярными выражениями. Вместо str_ireplace что-ниб типа:
preg_replace("/\b".$from."\b/i", $to[rand(0,count($to))], $Content);

ну кстати да, я че т не подумал =) У меня на сайте антимат-фильтр по похожей схеме работает, только синонимы из иксмл берутся.

Только чтоб регулярки начали работать на русском, нужно локаль поставить

set_locale(LC_ALL,"ru_RU.cp1251") или "ru_RU.UTF8", смотря какую используете в коде страниц и в коде пхп)

на виндус сервере будет соответственно Russian_Russia.1251 или Russian_Russia.65001

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий