2016-07-28 1 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> 

위를하자, 대화의 다음 부분으로 인도하는 기능을 저장합니다 : I가 제공하는 온 t (즉 있는지 어떻게 당신이 그것을 사용할 계획했다) 그 태그를 사용하는 대신입니다 예를 들어 "예"라고하는 패턴이 있고 많은 카테고리에 필요한 상황에서 유용합니다. 더 유창하게 만들기 위해이 코드를 개선해야 할 점이 많습니다. 이 도움을 발견 알려줘하고 노력하고 있습니다 날이 들어

+0

솔직히 귀하의 회신이 나에게 복잡한 보이는 :)하지만 내가 있기 때문에 아마 목표를 가지고 그렇게 많은 경험을하지 마십시오. 나는 당신의 대답을 이해하려고 노력할 것입니다. 내 원래의 솔루션에 관해서는, aiml이 아무런 문제가 없다고 말했듯이 왜 작동하지 않는지 알고 있습니까? 어떻게 한 일을하셨습니까? 위의 솔루션을 사용하여? – 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> 

을 :) 나를 확장 할 ...