我正在尝试PyAiml包来编写聊天机器人。我用A.L.I.C.E中的所有默认aiml文件编写了一个非常基本的程序。到目前为止一切正常,除了< that>标签。我以为这是会话问题。然后我修复了会话。但是< that>仍然没有运气用于上下文对话的标记。谁知道如何让它工作?或者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 :(得分: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>
上面将保存导致会话的下一部分的功能,然后让它被使用,如果有一个答案实际上用于触发它的变量,这在你有一个模式的情况下很有用例如,说“是”,并且是许多类别所必需的。 请注意,此代码还需要进一步改进,以使其更流畅。 如果您发现这有用,请告诉我,并希望我对其进行扩展:)
答案 1 :(得分: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>
对我而言,这是有效的......
答案 2 :(得分:0)
好的,这花了我一段时间才弄清楚。 Pyaiml的问题在于,要考虑 that 标签,您只需要在 that 标签内使用大写字母,而不能使用其他任何符号,例如'?','(' ,')'等。