2016-07-28 77 views
2

我正在嘗試PyAiml包來寫一個聊天機器人。我用A.L.I.C.E編寫了一個非常基本的程序,其中包含所有默認的aiml文件。一切工作正常,除了< >標記。我認爲這是會議問題。然後我修好了會議。但<仍然沒有運氣,>標籤的上下文對話。任何人都知道如何使它工作?或者PyAiml有<那個>標籤解析的bug?pyaiml沒有迴應<that>標記

這是我的bot程序和一個很小的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部分很好,wha T I來提供的是使用該標記(如果這是你如何正計劃使用它)的替代:

<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

老實說您的回覆看起來複雜,我:)但是,這可能是因爲我沒有那麼多的目標經驗。我會盡力瞭解你的答案。關於我原來的解決方案,正如你所說的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> 

對我來說,這是工作......