pyaiml对<that>标记没有响应

2024-05-19 01:49:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试PyAiml包来编写聊天机器人。我用a.L.I.C.E中的所有默认aiml文件编写了一个非常基本的程序。到目前为止,除了<;that>;标记外,一切都正常。我以为是会议的问题。然后我修复了会话。但在上下文对话中仍然没有这个标记。有人知道怎么做吗?或者PyAiml在标记解析方面有一些缺陷?在

这是我的bot程序和一个非常小的aiml文件,我正在测试:

测试机器人.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)

最小.aiml

^{pr2}$

Tags: path标记importidsessionbot机器人marshal
2条回答
   <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>

对我来说这是有效的。。。在

关于您的<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>

上面的方法将保存导致下一部分对话的函数,如果有一个答案实际用于触发它的变量,那么它就可以使用了,这在你有一个模式说“是”的情况下很有用,例如,许多类别都需要它。 请注意,为了使代码更流畅,还有更多的地方需要改进。 如果您觉得这很有帮助,请告诉我,并希望我对此进行详细说明:)

相关问题 更多 >

    热门问题