Разговорный бот

Discussion in 'PHP' started by cardons, 4 Mar 2012.

  1. cardons

    cardons Elder - Старейшина

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    В общем интересует данный сабж на PHP.
    Готовый решения.А так же идеи алгоритма чтобы получался логический ответ.
     
  2. brain

    brain Elder - Старейшина

    Joined:
    4 Jul 2010
    Messages:
    249
    Likes Received:
    90
    Reputations:
    33
    Один уже пишет
    http://forum.antichat.ru/thread321132.html
     
  3. cardons

    cardons Elder - Старейшина

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    Данный сабж не то что хотелось бы видеть у себя. Потому что использовать регулярные выражения в поиске текста явно не дадут логический ответ собеседнику. Да и структура if else в данном случае не правильна. Хочется создать пополняемую систему не вручную а теми же пользователями с которыми он будет общаться.
    Сейчас идея такова.
    1) Создать бд в Mysql с 3 столбцами. 1. id вопроса 2. вопрос 3. ответы в массиве
    2) Получаем фразу к примеру "привет как дела". Разбиваем ее на составляющие по слову. То есть получаем в итоге 3 слов 1."привет" 2."как" 3."дела"
    3) Далее задаем вопрос к базе mysql в котором указываем
    SELECT `otvet` FROM `baza` WHERE `vopros` LIKE '%привет%' and LIKE '%как%' and LIKE '%дела%'
    4) Получаем все данные по данному запросу и перебираем их циклом узнавая длину каждой строки. Где длина строки меньше всего тот вопрос считается самым схожим
    5) Получаем все ответы по данному вопросу который как помним храниться в бд в виде сериализованного массива
    6) Если ответов несколько рандомно выбираем один из них и отправляем его пользователю
     
    #3 cardons, 4 Mar 2012
    Last edited: 4 Mar 2012
  4. Zombi ****

    Zombi **** Elder - Старейшина

    Joined:
    4 Apr 2009
    Messages:
    166
    Likes Received:
    183
    Reputations:
    17
    идея хороша!
     
  5. cardons

    cardons Elder - Старейшина

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    Не ужели ни у кого нет идей по данному поводу?
    Так же был предложен вариант Slesh'a за что ему спасибо.
    Состоит он в том что каждое слово в своем смысле имеет вес. К примеру "я" 1 балл, "привет" 2 балла и т.д.
    Далее по такому же алгоритму как у меня происходит вытаскивание данных из бд. Вот только вместо 4 пункта в моем варианте ставим. 4) Получаем обший вес слов в приложении. Чем больше вес то фраза считается более схожа.

    Но данный вариант мне не подходит потому что каждому слову вручную надо означать его вес. А с учетом слов в русском языке это почти не выполнимо.

    Сейчас думаю как сделать склонение слов в мужской род или женский. Не буду же я в базе хранить ответ для мужского рода и женского отдельно. Хотелось бы работать с одной фразой. И исходя от рода говорящего и бота ставить фразы грамматически верно.


    То есть если в базе есть ответ "прости я отходил".

    Если бот у нас женского рода то фраза становиться "прости я отходила".