2016-07-28 4 views
2

Я пытаюсь пакет PyAiml написать чатбот. Я написал очень базовую программу со всеми этими файлами цели по умолчанию от A.L.I.C.E. Пока все работает нормально, кроме <, что тег >. Я думал, что это проблема сеанса. Затем я исправил сеанс. Но до сих пор не повезло с <, что > тег для контекстной беседы. Кто-нибудь знает, как заставить его работать? Или у PyAiml есть некоторая ошибка с <, что > разбор тегов?pyaiml не отвечает на <that> тег

Вот моя программа бот и оченьминимальная AIML файл я тестирую с:

testbot.py

import aiml 
import marshal 
import os 
from pprint import pprint 

BOOTSTRAP_FILE = "/var/www/html/chatbot/std-startup.xml" 
BOT_SESSION_PATH = "/var/www/html/chatbot/" 

sess_id = 'user_id_moshfiqur' 

while True: 
    k = aiml.Kernel() 
    k.bootstrap(learnFiles=BOOTSTRAP_FILE, commands="load aiml b") 

    if os.path.isfile(BOT_SESSION_PATH + sess_id + ".ses"): 
     sessionFile = file(BOT_SESSION_PATH + sess_id + ".ses", "rb") 
     sessionData = marshal.load(sessionFile) 
     sessionFile.close() 

     for pred, value in sessionData.items(): 
      k.setPredicate(pred, value, sess_id) 

    response = k.respond(raw_input(">> "), sessionID=sess_id) 

    sessionData = k.getSessionData(sess_id) 
    pprint(sessionData) 
    sessionFile = file(BOT_SESSION_PATH + sess_id + ".ses", "wb") 
    marshal.dump(sessionData, sessionFile) 
    sessionFile.close() 

    pprint("<< " + response) 

minimal.aiml

<aiml version="1.0.1" encoding="UTF-8"> 
    <category> 
     <pattern>TEST1</pattern> 
     <template>testing one</template> 
    </category> 
    <category> 
     <pattern>TEST2</pattern> 
     <that>testing one</that> 
     <template>Success</template> 
    </category> 
</aiml> 

ответ

0

Что касается вашего <that> проблема с тегами, все, что я могу вам сказать, это то, что на стороне AIML это нормально, т я пришел предложить является альтернативой использования этого тега (если это, как вы планировали использовать):

<category> 
     <pattern>TEST1</pattern> 
     <template>testing one<think> 
      <set name="xfunc">XTEST2</set> 
     </think></template> 
    </category> 

    <category> 
     <pattern>XTEST2</pattern> 
     <template>Success</template> 
    </category> 

    <category> 
     <pattern>TEST2</pattern> 
     <template><condition name="xfunc"> 
      <li value="xxnull"><srai>XDEFAULT ANSWER</srai></li> 
      <li value="*"><think> 
       <set var="temp"><get name="xfunc"/></set> 
       <set name="xfunc">xxnull</set> 
      </think><srai><get var="temp"/></srai></li> 
      <li><srai>XDEFAULT ANSWER</srai></li> 
     </condition></template> 
    </category> 

    <category> 
     <pattern>*</pattern> 
     <template><srai>XDEFAULT ANSWER</srai></template> 
    </category> 

    <category> 
     <pattern>XDEFAULT ANSWER</pattern> 
     <template>Bad input</template> 
    </category> 

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

+0

Честно ваш ответ выглядит сложным для меня :) Но это, наверное, потому что я не имеют такого большого опыта с прицелом. Я постараюсь понять ваш ответ. Что касается моего оригинального решения, как вы сказали, у цели нет проблем, то знаете ли вы, почему он не работает? Как вы сделали свою работу? Используя это решение? – sparrow

0
<category> 
    <pattern>TEST THAT</pattern> 
    <template>DO YOU LIKE MOVIES</template> 
</category> 

<category> 
    <pattern>YES</pattern> 
    <that>DO YOU LIKE MOVIES</that> 
    <template> What's your favorite movie? </template> 
</category> 

Для меня это работает ...