ПредишенСледващото

Разбира се, много от тях са вече забелязали някои нововъведения на нашия уебсайт. Сега аз ще ви кажа, където корените си отиват, как работи и как лодката се напълни с базови фрази. Направете абсолютно същия бота не е трудно, повярвай ми.


кореноплодни
Идеята да добавите бот сайт хвърли благороден дон Virus-ON. така че цялата заслуга за него.

Какво ви трябва, за да се създаде робот?
На първо място, фраза база данни на - бот паметта, така че да може да отговори на съобщението.
На второ място, един алгоритъм за избор на фрази - мозъчна бот, така че да отговаря на повече или по-малко в темата.


База данни. част 1
По една случайност е било възможно да се запознаят с един човек, програмирането за Android и ужасно мразят продукти на Apple. Един от неговите разработки е VK иха бот. източника на което е на GitHub.
Самото приложение не е интересен за нас, но на базата данни е в ранните етапи би било много полезно. Тя и взема.

база формат е както следва:
Мнение \ отговор \ значение
пример
здравей \ Здравейте, радвам се да те видя! \ 3
как си \ се справяш! \ 2
Аз съм мъж \ I Robot)) \ 2
Ние трябва да се направи разбор на този файл, премахване на излишните връзки, имена, псувни (от които има много) и да запази всичко в различен формат, който е разбираем база данни MySQL.
Скала скрипт език:

внос Скала. колекция. непостоянен. HashSet

внос Скала. Йо. източник

внос Java. Йо. досие

обект VkIHAbotDbExtractor # 123;

Вал filterWords = Array # 40; // тук обявата известно, псувни

Def основна # 40; аргументи. Array # 91; низ # 93; # 41; # 123;

Var комплект = нов HashSet # 91; фраза # 93;

нов файл # 40; аргументи # 40; 0 # 41; # 41;

филтър # 40; _. endsWith # 40; ".bin" # 41; # 41;

foreach # 40; е => определен набор = ++ отворите # 40; е # 41; # 41;

Замяната на деф ToString # 40; # 41; = S "(" $ съобщение ',' $ отговор "),"


В основния метод ние повтаряме през всички .bin файлове в директорията, и се обадете за всеки такъв файл отворен метод. Откритият метод чете линията на файл, като линия, и конвертира низа в класа по фраза. В клас Фраза разделихме низ в съобщение - отговор.
Всъщност специалните знаци за нашия бот - боклук. Той непременно знае къде входящото съобщение е запетая, тя трябва да се ръководи от на думи и цифри. ред

replaceAll # 40; "[^ \\ р \\ п] +". "" # 41;

тя просто го прави.
Между другото, на робота ни не разбира, че пред него: въпрос или твърдение. Но той може да разбере това от съвместна какво е казал. къде. как и т.н.

След изпълнението на скрипта, ще получим следното заключение в SQL-формат:

# 40; "0". "Един добър брой, което сте написали. # 41.

# 40; "1". "Имам проблем с номера." # 41.


Остава само да създадете таблица в базата данни и да попълните сметището.

Създаване на таблица АКО НЕ СЪЩЕСТВУВА `bot` # 40;

`Id` Int # 40; 11 # 41; NOT NULL auto_increment.

`Message` текст NOT NULL.

`Answer` текст NOT NULL.

първичен ключ # 40; `id` # 41.

Пълен текст KEY `message` # 40; `message` # 41;

# 41; ДВИГАТЕЛ = MyISAM DEFAULT CHARSET = utf8;

фрази алгоритъм за избор
Алгоритъмът е прост. Потребителят пише съобщение, което след това се предава на обработката на бота. Там ние премахваме всички допълнителни героите от съобщението и изглежда подобно на запис на базата данни. Открихме един - дават като отговор. Открихме няколко - е случайно избран от намерен. Не намерихте нищо подобно - ние изведете случайно отговор.

Сега, в ред и с кода.

1. получено съобщение, ние го върнете на филтъра:

частен функция филтър # 40; $ съобщение # 41; # 123;

$ Съобщ = mb_strtolower # 40; $ Съобщение. "UTF-8 ' # 41; ; // превод на текст в малки букви

$ Съобщ = str_replace # 40; самостоятелно. NAME. ''. ''. $ съобщ # 41; ; // премахне позоваването на бота

$ Съобщ = preg_replace # 40; '# \ [C (. +?) \ [/ C \] # особеното. ''. $ съобщ # 41; ; // премахване на офертата, в случай Magatino прекалено мързеливи, за да щракнете върху Отговор

$ Съобщ = preg_replace # 40; '/ [^ A-ZA-ya0-9] / ф. ''. $ съобщ # 41; ; // премахне всички специални символи

$ Съобщ = preg_replace # 40; "/ \ S + /. ''. $ съобщ # 41; ; // множество последователни интервали са заместени с един

връщане тапицерия # 40; $ съобщ # 41; ;


2. Изберете една фраза, с очевидното съвпадение:

SELECT `answer` FROM` bot` КЪДЕТО` message` = "здравей" РЕД ОТ RAND # 40; # 41; LIMIT 1


3. Ако това не е намерен, а след това ние използваме умно:

SELECT `answer` FROM` bot`

КЪДЕ MATCH # 40; `message` # 41; СРЕЩУ # 40; "Здравей" на естествен език MODE # 41> 0

ORDER BY RAND # 40; # 41; LIMIT 1


4. Ако има празен - изберете някоя от наличните отговор:

SELECT `answer` FROM` bot` РЕД ОТ RAND # 40; # 41; LIMIT 1


Най-интересното е може би второто искане. Той търси мачове на основата на естествен език. Това са разликите:

Обикновено сайт бот
Обикновено сайт бот

Тук, в действителност, в целия мозък.
PHP клас Bot.class.php

Използвайте следния начин (форум / say.php):

ако # 40; $ Id == 226 621 # 41; # 123; // идентификационен конци където бота ще отговорят

$ Отговор = Bot. byMessage # 40; $ съобщ # 41; -> getAnswer # 40; # 41; ;

`Text` = '." Mysql_real_escape_string # 40; $ Llogin. ''. $ отговор # 41. "" " # 41; ;

mysql_query # 40; "UPDATE` users` SET` lastdate` = '$ реално време "WHERE` id` ='". Бот. ID. "" " # 41; ;

База данни. част 2
Четири хиляди съобщения, очевидно не е достатъчно, трябва да се попълни базата на нещо, така че да съответства на мястото на темата. Разбор на всяко съобщение във форума не е най-добрият вариант - не е ясно къде въпросът къде отговора. Но тук е съобщението, съдържащо оферта, ние сме доста подходящ. Те вече имам един въпрос, и точно в същото съобщение като отговор.

Стигаме до основата на първия форум на всички съобщения, които съдържат един цитат:

SELECT `text` FROM` forum` КЪДЕТО` text` ПОЗИЦ "^ \\ [C (= | \]) * '


След това запишете на сметището. Получавам файловете в 12MB, съдържащ 38,000 записи.
Сега всичко, което трябва да се направи разбор. Отново канят помощта Scala.

внос Скала. колекция. непостоянен. HashSet

внос Скала. Йо. източник

внос Java. Йо. досие

Свързани статии

Подкрепете проекта - споделете линка, благодаря!