Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

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

Anna | 31.05.2014 | нет комментариев

Многие считают, что язык программирования prolog является сугубо научным и устаревшим языком для обучения студентов. Множество в институте «напрягали» именно этим языком на предметах, хоть немножко приближенных к теме неестественного разума, эта тема не обошла и меня.

Стандартная задача, которая мне попалась – оказалась настоль тоскливой и распространенной для этого языка, что был соблазн «скачать готовую даром без регистрации», но я решил перенести максимум из этого курса и повернуть тему пролога, для написания чего-нибудь фактически важного и увлекательного. Прочитав довольно много различной документации, в том числе и посты на прогре о prolog, я пришел к итогу, что пролог является хорошим инструментом для обработки предложений формального языка. Я решил, что было бы резко – написать бота, тот, что бы умел отвечать на фразы (может быть даже складно) вконтакте.

Реализация

Первым делом я написал стержневой функционал бота, т.е. интерфейс, дозволяющий мне, как админу — посылать команды для выполнения боту.

Список нынешних команд:

$commands = array('выйди', 'слушать', 'up', 'uptime', 'аптайм', 'last');

Собственно, всякая команда говорит сама за себя. Остановиться следует на 2-х командах:

  • слушать %текст% информирует боту, что необходимо поставить в ранг песню, где исполнитель – наименование = %текст%. К делу вообще не относится, легко стало любознательно.
  • И last – отображает последнее сообщение, отправленное боту. И пользователя, тот, что его отправил.

Выглядит это так:

Все это делалось в рамках обработки входящих сообщений. Дальше, обработка сообщений не от админа, т.е. предложения, которые требуют результата.

Вот здесь в дело входит prolog. А вернее, swi-prolog, реализация которого имеется как для windows ( там разрабатывалась ), так и для *nix (там работает теперь). Так же плюс swi-prolog в том, что он – интерпретируемый. Следственно, необходимо легко скормить файл со скриптом интерпретатору swi и поймать итог. При этом запомнить входную фразу, и при имеющейся результирующей фразе – записать эту связку в файл. Лист масок отменнее представить на примере, для входной строки:

 Здравствуй, как твои дела? 

список масок будет выглядеть как:


['*привет*','привет*','*привет','*как*','как*','*как','*твои*','твои*','*твои','*дела*','дела*','*дела’]

При этом мы обязаны запомнить, что это именно вопрос. Для этого список масок обрамляем предикатом request, и сберегаем в файл. Пример:


request(‘?’,['*привет*','привет*','*привет','*как*','как*','*как','*твои*','твои*','*твои','*дела*','дела*','*дела’]).

Дальше, запускаем скрипт, изложение алгорифма которого сводится к нескольким строчкам:

  • Читаем предикат из входного файла (тот самый request)
    
    consult('request.txt')
    

    А для того, Дабы текст в файле понимался как комплект предикатов, необходимо добавить изложение динамических предикатов где-нибудь в заголовке:

    
    :-dynamic(request/2).
    
  • Читаем базу познаний и получаем список вопросов-результатов и список вопросов без результатов.
    
    :-dynamic(question/2).
    :-dynamic(answer/2).
    :-dynamic(notanswered/1).
    :-consult('questionanswerlink.txt').
    :-consult('withoutanswer.txt').
    
  • Ищем вопрос\ответ
    
    goal2 :-
        toFile,
        consult('request.txt'),
        request(Type, KeyWords),%п_rqvmk!

    Помимо аккаунта бота, я сотворил заодно и публичную страницу, на которую отсылал скриншоты особенно увлекательных диалогов, и, множество диалогов дозволено прочитать написав в гугле “бот баба vk”, сурово 18. Их теснее набралось около 150ти. Кстати, если эту статью читают гуру prolog, может они преподадут мне пару уроков, либо дозволено, скажем, совместно поработать для создания больше разумного алгорифма работы, безусловно, если это кому-то увлекательно.

    К величайшему сожалению – нынешний алгорифм не разрешает боту обслуживать даже 10 заказчиков (дюже с трудом), бывает, что процесс обработки прерывается на пару минут, перебирая огромную базу познаний с огромным числом входных масок. Следственно ссылку на самого бота могу дать только паре человек и экстраординарно в ЛС.
    Спасибо, что дочитали до этого момента.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB