【问题标题】:AIML how to check if the input string matches one from a mapAIML如何检查输入字符串是否与地图中的一个匹配
【发布时间】:2020-02-01 04:31:31
【问题描述】:

我正在尝试比较用户的输入是否与 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


    【解决方案1】:

    您是否包含了整个库 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>
    

    【讨论】:

    • 非常感谢史蒂夫。你是对的,我没有包含整个库,我当然发现你的解决方案更容易理解。我测试了它并且工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2018-10-02
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多