Разбира се, много от тях са вече забелязали някои нововъведения на нашия уебсайт. Сега аз ще ви кажа, където корените си отиват, как работи и как лодката се напълни с базови фрази. Направете абсолютно същия бота не е трудно, повярвай ми.
кореноплодни
Идеята да добавите бот сайт хвърли благороден дон 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. Йо. досие
Свързани статии