pyaiml对<that>标记

时间:2016-07-28 21:16:28

标签: python aiml

我正在尝试PyAiml包来编写聊天机器人。我用A.L.I.C.E中的所有默认aiml文件编写了一个非常基本的程序。到目前为止一切正常,除了&lt; that&gt;标签。我以为这是会话问题。然后我修复了会话。但是&lt; that&gt;仍然没有运气用于上下文对话的标记。谁知道如何让它工作?或者PyAiml与&lt; that&gt;有一些错误标签解析?

这是我的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>

3 个答案:

答案 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 标签内使用大写字母,而不能使用其他任何符号,例如'?','(' ,')'等。