Первая схема, очень простого и не умного бота.*Шаблон+база данных.Фраза, выводимая программой, не выбирается из числа готовых фраз, а формируется с помощью заполнения некоторого шаблона (или одного из имеющихся шаблонов) словами из базы в зависимости от контекста разговора. -пока не умеет учиться, как это сделать, пока без понятия.После предварительного анализа в базу заносятся не все, а лишь некоторые фразы (например, относящиеся к значимым темам или являющиеся ответом на наиболее часто встречающиеся реплики). В этом случае, даже если алгоритм анализа фразы примитивен, программа умнеет достаточно быстро, а в базу не попадают бессмысленные реплики; но необходимо выработать удачные критерии отбора фраз. Add(MainForm,2953706,189,210) { Width=431 Height=329 Caption="Умный бот (0.0.1)" Position=1 } Add(Edit,8670163,98,77) { Width=415 Align=2 Text="" link(onEnter,2078886:doEvent1,[]) } Add(Memo,14659374,273,77) { Top=20 Width=415 Height=271 Align=5 } Add(Hub,2078886,154,84) { link(onEvent1,425789:doEvent1,[(206,90)(206,83)(206,83)]) link(onEvent2,4465529:doWork1,[(175,97)(175,111)]) } Add(MultiElement,4465529,182,105) { link(onEvent1,425789:doEvent2,[(222,111)(222,90)]) } BEGIN_SDK Add(EditMulti,1061766,21,21) { EventCount=1 WorkCount=1 Width=531 Height=375 link(doWork1,1980422:doModify,[(25,27)(25,48)]) } Add(StrList,7590074,91,56) { Strings=#29:привет=Привет, как дела $имя!|34:хорошо=Я, очень за тебя рад, $имя!| } Add(Replace,5125365,364,168) { SubStr="$имя" link(onReplace,12842497:In,[]) link(Str,6494692:Value,[(370,149)(356,149)]) link(Dest,13323879:Var,[]) } Add(Memory,2056730,217,28) { Default=String(Незнакомец) } Add(ArrayEnum,10160767,84,140) { link(onItem,11174774:doSplit,[]) link(Array,7590074:Array,[(90,120)(111,120)]) } Add(StrCase,1980422,28,42) { link(onModify,13976054:doValue,[(72,48)(72,72)(16,72)(16,97)]) } Add(Memory,13976054,28,91) { link(onData,10160767:doEnum,[(72,97)(72,146)]) } Add(StrPart,11174774,133,140) { Char="=" DirectEvent=0 link(onSplit,6494692:doValue,[(201,146)(201,104)]) link(onPart,13221857:doEvent1,[(170,153)(170,160)]) } Add(StrMask,15231518,203,154) { Point(doMask) link(onFalse,13028953:doReplace,[(240,160)(240,223)]) link(onTrue,5125365:doReplace,[(353,167)(353,174)]) link(Str,11441942:Var,[(209,152)(202,152)(202,140)]) } Add(LineBreak,9020021,28,140) { Type=1 link(Data,7866856:Var2,[]) Primary=[11441942,175,-14] } Add(Hub,13221857,175,154) { link(onEvent1,15231518:doMask,[(196,160)(196,167)]) link(onEvent2,15231518:doCompare,[(196,167)(196,160)]) } Add(Memory,6494692,350,98) { } Add(LineBreak,8872250,217,77) { Type=1 link(Data,2056730:Value,[]) Primary=[13323879,161,63] } Add(LineBreak,15413986,504,28) { link(Out,1061766:onEvent1,[(540,34)(540,27)]) Primary=[12842497,-70,140] } Add(GetDataEx,7866856,28,126) { link(Data,13976054:Value,[]) } Add(LineBreak,14018493,35,147) { Type=1 link(Data,7866856:Var3,[(41,131)]) Primary=[1762685,238,42] } Add(LineBreak,15779123,182,35) { link(Out,2056730:doValue,[(214,41)(214,34)]) Primary=[15195293,203,182] } Add(Replace,13028953,273,217) { SubStr="меня зовут " DestStr="1-" Point(CurentStr) link(onReplace,2464266:doSplit,[]) link(Str,1762685:Var,[]) } Add(StrPart,2464266,336,217) { Char="-" DirectEvent=0 link(onSplit,15195293:In,[]) link(Str,13028953:CurentStr,[(342,205)(310,205)(310,261)(279,261)]) } Add(InfoTip,3165757,0,21) { Info=#18:Регистру переводим| Width=85 Height=60 } Add(InfoTip,1402341,0,84) { Info=#18:Текст пользователя| Width=85 Height=46 } Add(InfoTip,11222914,77,28) { Info=#18:Шаблон+база данных| Width=92 Height=88 } Add(InfoTip,16629815,56,119) { Info=#12:Перебор базы| Width=113 Height=60 } Add(InfoTip,595701,168,119) { Info=#18:Сравнения с маской| Width=99 Height=74 } Add(InfoTip,15906990,315,63) { Info=#25:Подставка данных в шаблон| Width=169 Height=144 } Add(InfoTip,14262625,238,189) { Info=#24:Заполнить данные шаблона| Width=176 Height=81 } Add(InfoTip,12074308,175,28) { Info=#8:Ваше имя| Width=106 Height=67 } Add(InfoTip,7416486,427,7) { Info=#21:Ответ отправить в чат| Width=148 Height=53 } END_SDK Add(Hub,425789,231,77) { InCount=2 OutCount=1 link(onEvent1,14659374:doAdd,[]) } Add(InfoTip,16066098,77,56) { Info=#10:Пишем боту| Width=71 Height=88 } Add(InfoTip,9407358,259,49) { Info=#3:Чат| Height=88 } Add(InfoTip,5693582,154,56) { Info=#6:Анализ| Width=99 Height=88 } Add(InfoTip,6332098,161,182) { Info=#14:Сама программа| Width=99 Height=88 }
Шаблон в терминологии Бота — это фрагмент текста вида {шаблон} в отправляемых сообщениях анкеты.Редактировалось 2 раз(а), последний 2017-08-11 00:54:03
|