AIML, как проверить, совпадает ли строка ввода с картой - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь сравнить, если ввод пользователя соответствует ожидаемому ответу в AIML. Я обнаружил, что этот код хорошо работает, когда значение равно true, но по какой-то причине я не могу понять, что происходит сбой, когда сопоставление равно false (нет совпадения для и переходит к UD C). Если бы это сработало, я мог бы легко заменить второй * результатом моих карт.

С: 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>

У кого-нибудь есть лучший способ сделать Это? Большое спасибо.

1 Ответ

1 голос
/ 31 января 2020

Вы включили весь файл библиотеки AIML? Вам нужна эта категория для работы (она находится вверху файла):

<category>
  <pattern>
  XFALSE *
  </pattern>
  <template>FALSE</template>
</category>

Без нее будет вызываться UD C. Более эффективным методом было бы использование тега условия. Это устраняет необходимость использовать тег для установки дополнительных категорий:

<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>
...