【问题标题】:pyaiml does not respond on <that> tagpyaiml 不响应 <that> 标签
【发布时间】:2016-07-28 21:16:27
【问题描述】:

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

这是我的机器人程序和我正在测试的一个非常小的目标文件:

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>

【问题讨论】:

    标签: python aiml


    【解决方案1】:

    关于您的&lt;that&gt; 标签问题,我只能告诉您,它在 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>
    

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

    【讨论】:

    • 老实说,您的回复对我来说看起来很复杂 :) 但这可能是因为我没有太多的目标经验。我会尽力理解你的答案。关于我原来的解决方案,正如你所说,aiml没有问题,那么你知道它为什么不起作用吗?你是如何让你的一个工作的?通过使用上述解决方案?
    【解决方案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>
    

    对我来说这是可行的......

    【讨论】:

      【解决方案3】:

      好的,所以我花了一段时间才弄清楚。 Pyaiml 的问题在于,要考虑 that 标签,您必须在 that 标签内仅使用大写字母,而不能使用任何其他符号,例如 '?','(' ,')' 等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多