Eregi, сравнение и вывод текста

Grapefruit Lips

Новичок
Eregi, сравнение и вывод текста

Всем привет.
Подскажите мне пжалста. Ниже код.
Как вывести наиболее точное совпадение - "запрос - шаблон"

PHP:
//шаблоны
  $templates=array(
   "(.*)фото(.*)" => "Текст для запроса фото",
   "(.*)фото(.*)бабочек(.*)" => "Текст для запроса фото бабочек"
   );
     foreach($templates as $key => $temp){

         if(eregi($key, $query)) {
         echo $temp; 
	 }

     }
Сейчас, при запросе "фото бабочек"- скрипт выдаст ВСЁ, т.е. и "Текст для фото" и "Текст для бабочек"
Как, в данном случае, вывести наиболее точное совпадение, если нету , например шаблона для запроса - "фото кошек", то выводить просто текст для шаблона "фото", т.к. это наиболее точное совпадение, в сравнении с шаблоном "фото бабочек" для запроса "фото кошек".
 

DiMA

php.spb.ru
Команда форума
1. Наиболее длинный рег - в начало.
2. Нахрен .* по краям.
3. И нахрен здесь цикл?

PHP:
$templates=array( 
   "фото_ANY_бабочек" => "Текст для запроса фото бабочек" 
   "фото" => "Текст для запроса фото", 
);

$key=implode("_OR_",array_keys($t..));
$key=preg_quote($key);
$key=str_replace("_ANY_",".*",$key);
$key=str_replace("_OR_","|",$key);
$key=str_replace("!","\!",$key);
if (preg_match("!($key)!is",$text,$ok)) {
    echo $ok[1];
    echo $templates[$ok[1]];
}
 

Grapefruit Lips

Новичок
(.*) - это я хотел использовать как рег., т.е. запрос может быть как "фото бабочек" , так и "фотографии бабочек" - в этом то и проблема.

В примере, если
PHP:
$text="фото бабочек";
, то
PHP:
$ok = "фото_ANY_бабочек"
т.е. только если заменить -
PHP:
 $ok[1]=str_replace(" ","_ANY_",$ok[1]);
- тогда выведет "Текст для бабочек"

Как бы всё таки добиться этого:
Код:
Запрос                                  |  Шаблон Запроса      |  Возвращаем

 
Сколько денег стоит                 | сколько (*) стоит       |  100 руб.
Сколько сейчас время                | сколько (*) время       |  5 утра
Сколько траляля                     | сколько (*)             |  Много
Фотографии                          | фото*                   |  Какой-то текст
(*) - могут быть любые другие слова
* - для того, чтобы слова: "Фотографии", "Фотография", "Фоточки" и "Фото" считались за одно =)
Сложно мне догнать =(
 

Grapefruit Lips

Новичок
Хочу бота в чате сделать, только не особо тупого...
Чтобы хоть на простые вопросы старался отвечать нормально )

Все мои предыдущие попытки заканчивались МОРЕМ кода и КУЧЕЙ ВРЕМЕНИ для заполнения *вариантов вопроса боту*, а так же не совсем точными ответами на разного рода вопросы по *шаблонам*.

Никак не могу догнать, как сделать это *минимально* и наиболее похоже, т.е. чтобы шаблоны были близки к запросу и , следовательно заполнение их было чуть проще, хотябы озером, а не океаном..
 

WP

^_^
Я так и подумал про бота. Почитай про регулярки. А вообще, [m]similar_text[/m] :)
 

Grapefruit Lips

Новичок
Я и спрашиваю на форуме, потому что не понимаю как такое сделать на регулярках =((
Про similar_text я читал, я не понимаю как её использовать...

Я вижу наиболее реальным это шаблоны =(( Например:

Пользователь говорит: "Приветики я Эдуард"
Наиболее подходящий шаблон: "приве*"

Пользователь говорит: "Приветствую, как твои дела, мой покемон?"
Наиболее подходящий шаблон: "приве*дела" или "приве*как*дела"

Как такого добиться?
 

WP

^_^
> Про similar_text я читал, я не понимаю как её использовать...
Плохо читал.

Эти шаблоны неправильные. Выучи регулярные выражения на примитивном уровне.
 

Grapefruit Lips

Новичок
Ты не понимаешь, тот пример - это образно... где * - это всё что угодно... Естественно в регулярках это пишется по другому...

Similar_text - Вычисляет степень похожести двух строк в процентах....

Как её использовать?

Где-то хранится инфа, *похожая строка* и *ответ на вопрос*
Так вот если нету такой похожой строки (тем, чем занимается функция, о которой ты говоришь), что будет?

Например есть всего 2 шаблона:
что
что надо

Пользователь пишет - "что такое олово"

Получает:
что надо - Matched: 6 Percentage: 52,173913043478%
что - Matched: 3 Percentage: 33,333333333333%

Если я правильно понимаю, то на этот вопрос он получит ответ на *шаблон* - "что надо" , т.к. процент выше... Или как?
 

Андрейка

Senior pomidor developer
Grapefruit Lips
не грузись) пусть получит шаблон от "что надо"... или неправильный шаблон от регулярки.. все равно это тупой ии, а нормальный замучаешься делать
 

Grapefruit Lips

Новичок
Андрейка, я сейчас вообще не представляю, как можно сделать нормальный ии... а албанский, ошибки, знаки? =)

например:
Девушка входит в чат и пишет: "Вечером в Сухуми мандарины были такие же, как ты тогда не успел попробывать, когда опаздывал на самолёт СПБ - Сидней, где ты работал помошником мед брата. И фильм мне кстати вчерашний не понравился. Так что я пошла, ПОКА"
=)))))
как бы ответил *нормальный ии* ? - "Ну пока" ? =)

Хочу сделать так, как в 3-м сообщении сверху, там где code:, только как? =( =)
 

WP

^_^
Grapefruit Lips
Я как раз понимаю. А ты не выдумывай свои образные языки, а пиши по конкретным нормам.
Андрейка
Это вообще не ИИ.
 

Grapefruit Lips

Новичок
WP, ИИ вообще нету, ты хотел сказать.

Может кто подскажет, как можно сделать то, что я хочу, с шаблонами?
 

baev

‹°°¬•
Команда форума
Да в том-то и дело, что тут «шаблоны» только мешают.

Бейте фразы на слова. В зависимости от набора слов варьируйте ответ.
 

Grapefruit Lips

Новичок
Всем спасибо.
Не догнал я до чего-то другово....

PHP:
             function wi($word) {
                   global $text; 
                   
                   $swd = explode(" ",strtolower($text));
                    for($i=0;$i<count($swd);$i++) {
                      if(preg_match("/".$word."/", $swd[$i]))
                      return true;
                    } 
          }

if(wi("прив") && wi("дела")) {
  echo "ok";
  } elseif(wi("прив")) {
  echo "hello";
 }
Таких if-ов надо ой ой ой... может как то с mySQL совместить...
Короче буду эксперементировать..
 
Сверху