00:48
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, Weddew  
Chat-bot
elkaДата: Понедельник, 11.08.2008, 14:47 | Сообщение # 1
Уверенный в себе
Группа: Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус:
Делаю чат бота и вот появилась проблемка. Самообучение, сейчас попробую объяснить, как это задуманно мной в павно.

Во-первых, в самом скрипте бота, написано 50 слов и словосочетаний, которые он ищет, и если находит, то рендомно пишет 1 из нескольких вариантов ответа.

Во-вторых, если он не находит, в предложении, адресованном ему, не одного знакомого слова, то он пишет: «Я не понимаю, о чем, ты объясни».

Если бот не нашел и попросил объяснить, то игрок может написать:
«Запомни: [пишет основное слово, потом тире и объяснение, что это такое.]»
Например
Bot запомни: институт- высшее учебное заведение.

Бот записует, [институт - высшее учебное заведение.] в текстовый документ или конфиг, ну допустим “Memory”.
В нем пишется порядковый номер строки, первое слово (в нашем примере (институт)), потом запятая и вся фраза.

Возможно, что одно и тоже слово, будут объяснять и два, три или 4 раза. Тогда будет несколько строк.

Так, вот кода бот не находит слов в скрипте, то он обращается в документ “Memory” и в нем ищет знакомые слова. То есть, те, что находятся, после порядкового номера. При нахождении одного слова, он в буфер обмена, (возможно какой-то другой документ кидает) порядковый номер строки, и продолжает искать дальше, это слово, при повторном нахождении, так же номер строки кидается в буфер, кода весь файл “Memory” перебран до конца, то он рендомно выбирает, одно из чисел из буфера обмена, если их не сколько, и выводит строчку в чат с выбранным номером строки. После этого буфер очищается.
Если после того, как бот перебрал варианты, в скрипте и в файле памяти, и не нашел не одного знакомого слова, то он выдает:
«Я не понимаю, о чем, мы с тобой говорим объясни»

По учебникам pawno написать самостоятельно не получилось. Кто-то может помочь написать такой скрипт?


Сообщение отредактировал elka - Понедельник, 11.08.2008, 14:49
ScorpiДата: Понедельник, 11.08.2008, 15:05 | Сообщение # 2
Группа: I'm V.I.P.
Сообщений: 1504
Награды: 33
Репутация: 723
Замечания: 0%
Статус:
Ухты, прикольна, но сложна.
SpiritДата: Понедельник, 11.08.2008, 15:39 | Сообщение # 3
Освоившийся
Группа: Продвинутые
Сообщений: 129
Награды: 1
Город: Омск
Репутация: 14
Замечания: 0%
Статус:
Да задачка интересная ну тут тока strtok тебе в помощь:)
Ну вот правда я не совсем понимаю зачем нужно объяснять ему слова, разговаривать его всё равно по человечески не заставить, можно только что бы он запоминал фразы и варианты ответа на них, справочное бюро такого типа можно сделать:)



Любиш садизм люби и мазахизм :)
elkaДата: Понедельник, 11.08.2008, 17:08 | Сообщение # 4
Уверенный в себе
Группа: Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус:
Quote (Spirit)
Ну вот правда я не совсем понимаю зачем нужно объяснять ему слова, разговаривать его всё равно по человечески не заставить
На сколько я знаю, идеальный искуственый интелект еще не появился. А все попытки это сложные програмы, задающие действия при той или иной ситуации. А я вот хочу подобие разговорного бота в сампе. Тем более это только часть бота, которую сам не могу осуществить, а есть еще и другие, котрые частично или полностью уже работают. И это не то что, лежит тут на форумах с 4 фразами.

theAloneДата: Понедельник, 11.08.2008, 19:10 | Сообщение # 5
Долгожитель
Группа: Пользователи
Сообщений: 1380
Награды: 1
Город: Москва
Репутация: 92
Замечания: 0%
Статус:
Гдето так.
Code
    if(strcmp(cmdtext, "/zapomi", true, 7)==0) {

new str[256];

format(str,256,"%s - %s\r\n",cmdtext[9],cmdtext[11]);

new File: UserFile = fopen(mem.txt, io_append);

fwrite(UserFile, strxz);

   return 1;
  }

Добавлено (11.08.2008, 19:10)
---------------------------------------------
Не тестил

TaLeRoKДата: Вторник, 12.08.2008, 18:00 | Сообщение # 6
Советчик
Группа: Продвинутые
Сообщений: 1237
Награды: 14
Город: Гдето там->
Репутация: 138
Замечания: 100%
Статус:
Мошьабно думаем, одновремено кажетсо что идея легкая и сложная, если взять словарь слов с их понятиями (искать в инете, 60к слов) и ставить в бота, то возможно, однако надо его ещё програмировать на несколько вариантов ответов(((



elkaДата: Вторник, 12.08.2008, 21:05 | Сообщение # 7
Уверенный в себе
Группа: Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус:
Quote (TaLeRoK)
однако надо его ещё програмировать на несколько вариантов ответов(((
Талерок ты наверное прочитал только часть моего поста. Собственно вот.
Quote (elka)
Так, вот кода бот не находит слов в скрипте, то он обращается в документ “Memory” и в нем ищет знакомые слова. То есть, те, что находятся, после порядкового номера. При нахождении одного слова, он в буфер обмена, (возможно какой-то другой документ кидает) порядковый номер строки, и продолжает искать дальше, это слово, при повторном нахождении, так же номер строки кидается в буфер, кода весь файл “Memory” перебран до конца, то он рендомно выбирает, одно из чисел из буфера обмена, если их не сколько, и выводит строчку в чат с выбранным номером строки. После этого буфер очищается.

[DPS]EvilRiaz попробую сделать наподобие, как ты посоветывал.

SpiritДата: Вторник, 12.08.2008, 21:38 | Сообщение # 8
Освоившийся
Группа: Продвинутые
Сообщений: 129
Награды: 1
Город: Омск
Репутация: 14
Замечания: 0%
Статус:
elka, вот смотри у тебя есть огромная база слов с их значениями, ты представляешь себе алгоритм ответа на фразу типо "как дела?", он найдёт в базе определения слов "дела" и "как", что же далее, выведит их значения? есть другой вареант бота, он конечно значения слов не запоминает, но он хоть отвечать сможет, тоесть мы пишем опять таки документик memory, но храним там не слова и их значения, а вопросы и вареанты ответов на них, следует учесть что на разные вопросы могут быть разные вареанты ответов и наоборот, ну предпологаемый вид документа.

question: //это у нас вопросы
Как дела?
Как Жизнь
answer: //это ответы
Нормально
Хреного
Иди на*** я занят!

question:
//---------

answer:
//--------

Алгоритм примерно такой, бот получает вопрос "Как дела?" далее в циле ищет ключевое слово "question:" как только находит начинает другое сканирование ищет фразу, одновременно проверяя не является ли строка пустой, если является значит дальше пойдут ответы, опять ищет "question:"
и так далее, как только нашёл фразу опускается ниже до слова "answer:" загружает вареанты ответов в буфер и даёт ответ. В данном случае очень важно сделать простую систему дополнения вопросов и ответов, но сразу хочу сказать что через игру это будет затруднительно так что лучше вручную через файл, в твоём первом вареанте тоесть то что любой желающий может забить слово это не самообучение, это дополнение слов и в таком дополнии любой желающий засрёт его память как хочут.

Далее если ты хочеш например что бы после ответа бот задал ответный вопрос типо "А у тебя?" ещё ключевое слово и так далее, потом игрок может ведь не только спросить, он ведь может и утверждать, чем отличается утверждение от вопроса? знаком на конце фразы у вопроса это всегда '?' у утверждения например '.' у жалобы или восклицания '!', в данном случае конечно прийдётся ставить кое какие правила общения с ботом:)

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

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

Возможно я не прав, но мне кажется что такой метод может дать результат.


Любиш садизм люби и мазахизм :)

Сообщение отредактировал Spirit - Вторник, 12.08.2008, 21:58
OKStyle™Дата: Вторник, 12.08.2008, 23:03 | Сообщение # 9
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2444
Награды: 16
Город: Оренбург
Репутация: 1174
Замечания: 40%
Статус:
Спирита в саппорт new_russian


Да потому что когда человек делает на заказ он не старается. © kRiSyo
Кланяимся нофаму королю анимаций =))))))) © Manusya
В MTA - для вас все багоюзеры. Не юзают там +с только EFO и ACF. © SeWeR
elkaДата: Среда, 13.08.2008, 04:11 | Сообщение # 10
Уверенный в себе
Группа: Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус:
Quote (OKStyle™)
Спирита в саппорт
Поддержую.. За сегодня помог уже раза 4. :)
Quote (Spirit)
Вообще если судить о том что ты не знаеш как дополнить в файл слово с его определением, то стоит ли говорить о том сможешь ли ты выполнить поставленую перед собой задачу:)
Я знаю, что хочу получить и теоритически продумал алгоритм работы. Да знание павно у меня не ахти. Но разбил все на небольшие задачи и с помощью других людей пытаюсь разобраться в не сложных вещах, что бы потом обьединив все сделать задуманное. Или я не прав по твоему?

Добавлено (13.08.2008, 04:11)
---------------------------------------------

Quote (elka)
Тем более это только часть бота, которую сам не могу осуществить, а есть еще и другие, котрые частично или полностью уже работают. И это не то что, лежит тут на форумах с 4 фразами.
Так, что Спирит за идиота меня считать не надо. Схему на поиск слов и ответов давно уже использую. Если как говоришь встречаеться 2 слова, то ищет, то которое первое в скрипте и так по порядку убыванию. То есть не котрые имеют больший приоритет над другими. Кроме етого в боте забиты и словосочетания типа.

new spish[][] = { // Разговор о сне

" Сплю.",
" Нет. Не сплю.",
" Да какой тут сон, кода ты постоянно кричишь",
" Я с тобой спать не буду, и не надейся"
};

f(strfind(text, BotStr4, true) != -1 && strfind(text, "спишь?", true, 0) != -1)
{
if(BotOn == 1)
{
new Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, sizeof(Name));
format(String[playerid], 200, "%s, %s", Name, spish[random(sizeof(Sayings))]);
SetTimerEx("Send",170,0,"i", playerid);
return 1;
}
}

Как видно из приведеного мною части кода скрипта. Варианты ответов, словосочетания и знаки(восклицательный и вопросительный) все у меня учитываеться. Не надо изобретать велосипед для меня второй раз. по поводу самообучения от игроков я уже об етом думал и отбросил ету идею. Во первых при игре 10+ игроков, разговор между двумя не возможен, ибо общаються все и будут проскальзывать фразы, так сказать "левых" игроков. Во вторых даже если один игрок говорит со вторым, то он может бегло прочитать и дать ответ не задумываясь, что приведет бота к тупым запоминаниям. В третьих большинство игроков при разговоре (повезет, что не общаються на транслите, есть такие люди), но 95 процентов делает граматические ошибки в каждом втором сообщение. Тоесть произнеся "Кракадил". Это слово будет запомнено, но не когда не употребиться больше, так как было запомнено безграмотно.

Извени за критику, но возможно я в павно и не бог, но с логикой и другими языками програмирования дружу.

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


Сообщение отредактировал elka - Среда, 13.08.2008, 04:14
SpiritДата: Среда, 13.08.2008, 09:39 | Сообщение # 11
Освоившийся
Группа: Продвинутые
Сообщений: 129
Награды: 1
Город: Омск
Репутация: 14
Замечания: 0%
Статус:
Я не говорю что ты прям не сможешь найти словосочетание это можно делать используя функция !strcmp, а не strfind её лучше для поиска матов использовать :) . Из указоного выше кода я понял что бот в конечном итоге будет иметь не 1,6к, а 6к и более строк, но это не важно, нам важен результат. Я всё равно не понимаю зачем нужно забивать ЗНАЧЕНИЯ слов потом всё равно будет непонятно что с ними делать, ты показал алгоритм поиска вопросов непосредственно по скрипту, я показывал как это будет выглядеть в файле. Самообучение может вестись по перехвату PM сообщений, если таковые будут встроены в FS с ботом либо другой вариант пишем обработчик события в FS с ботом, а из мода в котором встроены PM или мобила(Penils) или в скрипте, где они есть используя функцию CallRemoteFunction() вызываем эту функцию она позволяет вызывать функцию из любого загруженного мода или FS.

Написать простенького бота с 4-мя фразами можно минут за 15 с нуля.

Quote

Бот записует, [институт - высшее учебное заведение.] в текстовый документ или конфиг, ну допустим “Memory”.
В нем пишется порядковый номер строки, первое слово (в нашем примере (институт)), потом запятая и вся фраза.

Записали, ещё раз спрашиваю что дальше? Ты привёл пример где опять таки ищется не слово, а ФРАЗА(ВОПРОС) про знаки в конце строки я писал потому что можно сделать так что например я задал ему вопрос "Как дела?" получил ответ "Нормально" и в добавок встречный вопрос "А у тебя?" отвечаю "Плохо!" опять вопрос "А почему?" получилось нечто вроде диалога, но это уже дебри. Пока что считаю твой алгоритм ошибочным.


Любиш садизм люби и мазахизм :)
elkaДата: Среда, 13.08.2008, 11:05 | Сообщение # 12
Уверенный в себе
Группа: Продвинутые
Сообщений: 155
Награды: 1
Репутация: 12
Замечания: 0%
Статус:
Quote (Spirit)
Из указоного выше кода я понял что бот в конечном итоге будет иметь не 1,6к, а 6к и более строк, но это не важно, нам важен результат.
Собственно, чем больше база слов бота, тем он "умнее". Возможно можно делать компактней, но пока делаю как могу.
Quote (Spirit)
Написать простенького бота с 4-мя фразами можно минут за 15 с нуля.
Бот с 4 фразами есть на форуме. С чего я и начал в принципе.

Предыдущий пост ты расписал красиво о принципе работы. Я могу придумать другой алгоритм работы, но как ты и говорил, чем продуманней тем сложней. Spirit если есть свободное время мог бы написать сам код? С чтением и записью с файлов у меня проблемы, так как раньше как-то не приходилось пользоваться.

  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua