AIML 如何检查输入字符串是否与地图中的匹配
AIML how to check if the input string matches one from a map
我正在尝试比较用户的输入是否与 AIML 中的预期答案相匹配。我发现这段代码在值为 true 时运行良好,但由于某种我无法理解的原因,当匹配为 false 时失败(没有匹配项并转到 UDC)。如果有效,我可以轻松地将第二个 * 替换为我的地图结果。
发件人:https://github.com/pandorabots/aiml-utilities/blob/master/lib/aimlstandardlibrary.aiml
<!-- STRING EQUALS-->
<category>
<pattern>XEQ * XS *</pattern>
<template>
<learn>
<category>
<pattern>
<eval>
<uppercase>XFALSE <star/></uppercase>
</eval>
</pattern>
<template>TRUE</template>
</category>
</learn>
<srai>XFALSE <star index="2"/></srai>
<learn>
<category>
<pattern>
<eval>
<uppercase>XFALSE <star/></uppercase>
</eval>
</pattern>
<template>FALSE</template>
</category>
</learn>
</template>
</category>
有没有人有更好的方法呢?非常感谢。
您是否包含了整个库 AIML 文件?你需要这个类别才能工作(它在文件的顶部):
<category>
<pattern>
XFALSE *
</pattern>
<template>FALSE</template>
</category>
没有它,UDC 将被调用。一种更有效的方法是使用条件标签。这消除了使用 标签设置额外类别的需要:
<category>
<pattern>XEQ * XS *</pattern>
<template>
<think>
<set name="value1"><star/></set>
<set name="value2"><star index="2"/></set>
</think>
<condition name="value1">
<li><value><get name="value2"/></value>TRUE</li>
<li>FALSE</li>
</condition>
</template>
</category>
我正在尝试比较用户的输入是否与 AIML 中的预期答案相匹配。我发现这段代码在值为 true 时运行良好,但由于某种我无法理解的原因,当匹配为 false 时失败(没有匹配项并转到 UDC)。如果有效,我可以轻松地将第二个 * 替换为我的地图结果。
发件人:https://github.com/pandorabots/aiml-utilities/blob/master/lib/aimlstandardlibrary.aiml
<!-- STRING EQUALS-->
<category>
<pattern>XEQ * XS *</pattern>
<template>
<learn>
<category>
<pattern>
<eval>
<uppercase>XFALSE <star/></uppercase>
</eval>
</pattern>
<template>TRUE</template>
</category>
</learn>
<srai>XFALSE <star index="2"/></srai>
<learn>
<category>
<pattern>
<eval>
<uppercase>XFALSE <star/></uppercase>
</eval>
</pattern>
<template>FALSE</template>
</category>
</learn>
</template>
</category>
有没有人有更好的方法呢?非常感谢。
您是否包含了整个库 AIML 文件?你需要这个类别才能工作(它在文件的顶部):
<category>
<pattern>
XFALSE *
</pattern>
<template>FALSE</template>
</category>
没有它,UDC 将被调用。一种更有效的方法是使用条件标签。这消除了使用
<category>
<pattern>XEQ * XS *</pattern>
<template>
<think>
<set name="value1"><star/></set>
<set name="value2"><star index="2"/></set>
</think>
<condition name="value1">
<li><value><get name="value2"/></value>TRUE</li>
<li>FALSE</li>
</condition>
</template>
</category>