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>