Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

21 Сентябрь, 2017, 01:02:47
 

 Идея реализации форумного бота.

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Идея реализации форумного бота.

« : 25 Апрель, 2013, 10:14:53 »
Как ни странно, под форумными ботами на форумах чаще понимаются всевозможные служебные фичи, выводящие какую-либо информацию в сообщение (примером такого может служить форумное подсознание). Ну а также всевозможные программки, рассылающие рекламу, парсящие, или индексирующие форум.
Впрочем, и когда под форумными ботами понимают программки для общения тоже нередко бывает. Увы, почему-то какие-то готовые решения по написанию таких ботов относительно редки. Они, конечно, есть, но их мало (вот, например, вполне себе жизнеспособный бот для общения, свободно распространяемый)... а доступных именно для этого типа форума мне и вовсе найти не удалось (в смысле тех, которые не требуется допиливать, а в идеале и вовсе отдельным модом).
В общем в результате я решил написать своего бота, совместимого с этим форумом и обучаемого.

Вкратце идея реализации такова.
Обитать он будет отдельным файликом, пользовать свою собственную базу (форумная и так уже большая, да и у обучаемого бота база может ох как разрастись), плюс к нему будет прилагаться отдельным файликом яваскрипт, крутящийся уже на форуме и дающий знать боту, что требуется его ответ.

Скорее всего, поначалу боту будут выделяться определённые темы, в которых ему будет иметь смысл общаться. Скрипт будет отлавливать нажатие на кнопку "отправить" в меню редактирования сообщений (оно же меню создания) этих тем и, запускать php файлик бота, после чего возвращать управление форуму (сиречь банальный "return true" после аджаксового запуска бота). Теоретически хитрые кулхацкеры смогут запускать бота вообще для любой темы просто-напросто, скопировав скрипт и запуская его принудительно, но оно, в общем-то, не сильно большая неприятность (если вообще может считаться неприятностью).
Дальше php файлик бота будет ждать секунд 5 (что б тема гарантированно опубликовалась) и брать из ссылки, с которой его вызвали номер темы. Потом смотреть там сообщения, которые написаны не им и анализировать их. Ну и плюс будет создаваться специальный файлик-индикатор, что бы предотвратить повторное срабатывание бота в одной и той же теме при одновременной публикации сообщений разными пользователями.

Если в сообщении упоминается одно из ключевых командных слов (и автор сообщения находится в списке доверенных) то выполнять соответствующую команду. Иначе же - пытаться выбирать сооотвествующий ответ из имеющихся в базе вариантов.
При отсутствии ответа и наличии пользователя в базе доверенных бот будет спрашивать, что ему отвечать. При получении ответа от этого пользователя - записывать себе в базу предложенный вариант ответа.
При отсутствии ответа и пользователя в списке доверенных, бот будет выдавать один из имеющихся вариантов-"заглушек".

Структура базы бота предполагается состоящей из нескольких таблиц.
1. Таблица вариантов ответов. С полями соответственно: "порядковый номер", "вариант вопроса" , "вариант ответа 1", "вариант ответа 2", "вариант ответа 3".
2. Таблица ответов/заглушек. Поля тут будут "порядковый номер", "вариант ответа".
Плюс внешний конфигурационный файлик, в котором будут содержаться в виде массивов список доверенных пользователей и количество ответов/заглушек (тем самым к базе не придётся регулярно делать запросы, с целью получения количества оных заглушек).

Пока всё. Реализовывать начну в ближайшее время, походу сюда буду делать заметки о принятых решениях и прочем.

P.S. Так как сколь-нибудь великим программистом себя не считаю, всевозможная конструктивная критика и предложения приветствуются.

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #1 : 25 Апрель, 2013, 13:41:23 »
Поиск фраз, на который боту отвечать в тексте, судя по всему, оптимальнее делать с помощью eregi (если делать без него то,  возможно, предварительно придётся зачистить из текста большие буквы, запятые, смайлики, двойные пробелыи окончания слов).
При внесении фраз в базу, вносить их с переподвыпертом. А именно с обрезанием последних гласных каждого слова и вставлением в конце каждого слова регекспа "\S*" + заменой пробелов на "\s" (а лучше даже " [^а-я.]*[а-я]{0,3}[^а-я.] "), что бы находились и близкие по написанию слова (а также слова разделённый смайликами, запятыми и предлогами).
Или же тупо вносить слова нормально, а обрабатывать их уже на выходе из базы. А лучше, наверно, промежуточный враиант - вносить слова без окончаний и с пробелом между ними, а на выходе дописывать на место пробела регексп для окончаний, пробелов... в общем см. постскриптум. 
При чём гонять текст циклом через все имеющиеся в базе фразы. Ну и, конечно, гонять всю эту радость с модификатором i (что позволит нам не париться со строчными/заглавными буквами).

Как-то смотрится дико неоптимально, но пока приходит в голову только худшая альтернатива. А именно - разбить текст на ключевые фразы и искать по базе с помощью "like".

P.S. Окончательный регексп будет выглдеть, например, вот так... скажем исходно фраза "себе четвероногого". Соотвественно в базе храним вот такое
себ\S*[^а-я.]*[а-я]{0,3}[^а-я.]четвероногог\S*

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #2 : 25 Апрель, 2013, 16:27:46 »
Так как в разных словосетаниях могут присуствовать одни и те же ключевые слова, имеет смысл, прогоняя фразы из базы сквозь текст сортировать их по длинне, начиная с самых длинных. К счастью дополнительного поля в базу для этого вводить не требуется, достаточно воспользоваться такой встроенной в mysql штукой как  CHAR_LENGTH. Пример запроса с его использованием.
SELECT * FROM articles ORDER BY CHAR_LENGTH(a_title)

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #3 : 26 Апрель, 2013, 11:24:19 »
Нашлась в интернете статейка с теоертическими выкладками касательно бота. Почитал, вроде ничего особо полезного не нашёл, но, на всякий случай, ссылку на неё оставлю. Вдруг я там чего-нибудь нужное не заметил...

Оффлайн Labris

  • Император Атлантис
  • Форумный гуру
  • *****
  • Сообщений: 874
  • Репутация. +20/-3
  • Император Атлантис
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #4 : 27 Апрель, 2013, 13:06:30 »
Интересно, а алгоритм для анализа контекста, хотя бы в рамках одного предложения, есть?

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #5 : 27 Апрель, 2013, 14:36:39 »
Собственно отлов ключевых словосочетаний и есть оный алгоритм. Пока всё.
Если есть идеи - пиши. Попробую сделать.

Оффлайн Labris

  • Император Атлантис
  • Форумный гуру
  • *****
  • Сообщений: 874
  • Репутация. +20/-3
  • Император Атлантис
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #6 : 27 Апрель, 2013, 15:01:56 »
Не знаю насчёт выборки предложений, а вот по анализу...
Предлагаю так:
1. Бот должен помнить тему разговора, заданную явно конструкциями типа: "Поговорим о ....?".
2. В предложении последовательно ищутся: корни ключевого слова-темы, базовые словесные конструкции, возможные корни для перекрёстных ссылок, признаки типа предложения (вопрос, утверждение, отрицание и т.п.).
3. Параллельно теме, составляется таблица перекрёстных ссылок заданной глубины, поиск в которой проводится в первую очередь (либо к основной базе применяется такой фильтр).
4. В шаблонах ответов есть коючевое поле, отвечающее за настроение и тон беседы. Этот параметр содержится в переменных сеанса, и однозначно формируется из них.
5. Переменные сеанса ведут счёт фразам разного типа: оскорблениям, комплиментам, уходам от ответа, утверждениям и пр., на основании которых формируется "отношение к собеседникам". Это отношение запоминается в отдельной базе пользователей, если таковая будет вестись.
6. За счёт данных из базы, либо за счёт манипуляции с переменными, можно изменять стартовое "насторение" бота. Также можно задать для каждого пользователя отдельное имя бота и прочие признаки (вплоть до пола и вариантов анимации).
7. Следует подумать о возможности эмуляции нейросети, в вариантах распознавания содержания предложения и распознавания картинок (это, конечно, на перспективу).
8. У бота должен быть набор отдельных словарей по темам, чтобы не грузить в память объёмные базы.
9. У бота должна быть система обучения, основанная на загрузке и анализе текстовых файлов под руководством оператора, а также форма настройки цепочек "вопрос-ответ-перекрёстные темы".

Для начала, как-то так.

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #7 : 27 Апрель, 2013, 15:05:29 »
Попробуем.
Правда оно не сильно "поначалу".

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #8 : 27 Апрель, 2013, 15:09:28 »
Не, походу получается что вот так сразу не реализовать. С другой стороны предложенное тобой вполне может быть дописано уже на что-то работающее.
Так что сперва буду делать более простой механизм со словосочетаниями, но с учётом необходимости дальнейшего совершенствования. А после уже будем постепенно наращивать...

Оффлайн Labris

  • Император Атлантис
  • Форумный гуру
  • *****
  • Сообщений: 874
  • Репутация. +20/-3
  • Император Атлантис
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #9 : 27 Апрель, 2013, 15:30:18 »
Для начала - это в смысле, что данный список первое, пришедшее мне в голову.

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #10 : 27 Апрель, 2013, 17:12:43 »
Аааа. Ну тады тем более  :)

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #11 : 07 Май, 2013, 09:19:58 »
Окончательный регексп будет выглдеть, например, вот так... скажем исходно фраза "себе четвероногого". Соотвественно в базе храним вот такое
себ\S*[^а-я.]*[а-я]{0,3}[^а-я.]четвероногог\S*
Как оказалось в процессе написания всё-таки лучше обрабатывать словосочетания уже при получении их из базы (так легче править и добавлять словосочетания в базу).
Плюс сам регексп в том виде, как задуман мной изначально оказалася нежизнеспособен. Теперь вместо него используется вот такой.
\S*\W*\w{0,3}\W*
Возможно и этот со временем будет видоизменён.

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #12 : 08 Май, 2013, 11:08:11 »
Благодаря siriddean у (собственно нашедшему данную литературу) имеется небольшой набор литературы, могущий пригодиться на поздних этапах создания бота (на ряду с вышеизложенными рекомендациями императора). Так как две недели к месту гдед он хранится у емня доступа не будет , выкладываю литературу в качестве вложений к данному сообщению.
P.S. В "Текст, как объект исследования" первая глава мало чем поможет в данном вопросе. А вот со второй...

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #13 : 08 Май, 2013, 20:52:28 »
Распознавать текст бота уже научить удалось. Результат на примере данной темы можно посмотреть вот здесь (бот отвечает на последние 5 сообщений).

От системы каких-то встроенных непосредственно в текст команд для бота я, по трезвому размышлению, решил отказаться (имхо, будет сложнее учить бота адекватно отвечать). Сейчас вот пишу механизм, который позволит добавлять сообщения в базу бота. А также редактировать их там и просматривать список уже имеющихся сообщений.

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

Оффлайн Iaroslav

  • Имперская
    администрация
  • Форумный гуру
  • ****
  • Сообщений: 2381
  • Репутация. +49/-0
    • Просмотр профиля

Re: Идея реализации форумного бота.

« Ответ #14 : 09 Май, 2013, 22:16:26 »
Механизм добавление, редактирования и просмотра сообщений в базе бота я написал и всё-таки написал и даже проверил его в действии.  8)
P.S.  Пока что он доступен только для администраторов, поэтому ссылку здесь на него размещать наверно не буду. А там, как допишем, уже будем думать как быть дальше... можно, например, потом дописать возможность для желающих создавать какие-то свои базы ответов и списки тем, на которые надо отвечать. Но это сильно потом ибо осталось, по сути, самое сложное  O:-)

 

Краткая информация об империи