На самом деле вы не можете сделать это, используя карты, если не настроите карту, подобную этой:
[
["brown", "Markus, David, Thomas"],
["black", "Stephen, Paul"],
["blonde", "Simon"]
]
Это может быть много ручной работы и не очень практично. Когда я работаю с такими простыми базами данных, я настраиваю каждую запись в своей собственной категории:
<category>
<pattern>XFRIEND 1</pattern>
<template>
<think>
<set name="friend">Markus</set>
<set name="hair">brown</set>
<set name="eyes">blue</set>
<set name="likes">pizza</set>
</think>
</template>
</category>
<category>
<pattern>XFRIEND 2</pattern>
<template>
<think>
<set name="friend">Kevin</set>
<set name="hair">black</set>
<set name="eyes">brown</set>
<set name="likes">burgers</set>
</think>
</template>
</category>
<category>
<pattern>XFRIEND 3</pattern>
<template>
<think>
<set name="friend">Thomas</set>
<set name="hair">brown</set>
<set name="eyes">green</set>
<set name="likes">burgers</set>
</think>
</template>
</category>
<category>
<pattern>XFRIEND 4</pattern>
<template>
<think>
<set name="friend">David</set>
<set name="hair">black</set>
<set name="eyes">blue</set>
<set name="likes">burgers</set>
</think>
</template>
</category>
, а затем создаю категорию, которая будет сканировать и проверять каждую запись:
<category>
<pattern>XSCANFRIENDSDATABASE</pattern>
<template>
<think>
<set name="list">Results:<br/></set>
<srai>XFRIEND 1</srai>
<srai>XCHECKMATCH</srai>
<srai>XFRIEND 2</srai>
<srai>XCHECKMATCH</srai>
<srai>XFRIEND 3</srai>
<srai>XCHECKMATCH</srai>
<srai>XFRIEND 4</srai>
<srai>XCHECKMATCH</srai>
</think>
<get name="list"/>
</template>
</category>
Теперь у нас есть настроенная база данных, давайте посмотрим, как мы можем ее использовать. Я хочу знать, "Кто имеет (независимо от цвета) волосы". Мы можем сделать это с помощью этой категории:
<category>
<pattern>WHO HAS * HAIR</pattern>
<template>
<think>
<set name="searchfor"><star/></set>
<learn>
<category>
<pattern>XCHECKMATCH</pattern>
<template>
<condition name="hair">
<li><value><get name="searchfor"/></value>
<set name="list"><get name="list"/><br/><get name="friend"/></set>
</li>
</condition>
</template>
</category>
</learn>
</think>
<srai>XSCANFRIENDSDATABASE</srai>
</template>
</category>
Итак, в вашем запросе «У кого коричневые волосы» предикату «searchfor» присвоено значение «коричневый», поскольку именно это мы и ищем.
Затем мы используем тег , чтобы установить временную категорию под названием «XCHECKMATCH», которая просматривает значение «hair» в каждой записи в нашей базе данных и сравнивает его с «searchfor». Если он совпадает, добавьте его в список.
После настройки мы просканируем базу данных и отобразим результаты.
Человек - у кого каштановые волосы?
Бот - Результаты:
Маркус
Томас
В качестве расширенного использования мы также можем проверить наличие более одного предмета. Например, «Кто имеет черные волосы и любит гамбургеры?»
<category>
<pattern>WHO HAS * HAIR AND LIKES *</pattern>
<template>
<think>
<set name="searchfor"><star/> <star index="2"/></set>
<learn>
<category>
<pattern>XCHECKMATCH</pattern>
<template>
<think><set name="found"><get name="hair"/> <get name="likes"/></set></think>
<condition name="found">
<li><value><get name="searchfor"/></value>
<set name="list"><get name="list"/><br/><get name="friend"/></set>
</li>
</condition>
</template>
</category>
</learn>
</think>
<srai>XSCANFRIENDSDATABASE</srai>
</template>
</category>
В этом примере searchfor становится «черными гамбургерами». Мы создали новый предикат под названием «найдено» (то, что база данных нашла). Это состоит из " "и еще раз мы сканируем базу данных, чтобы увидеть, что соответствует:
Человек -" Кто имеет черные волосы и любит гамбургеры? "
Бот - Результаты: Кевин
Дэвид
I регулярно используйте этот метод базы данных для ответов на сумасшедшие вопросы, такие как «Поезд быстрее улитки?». Нет смысла создавать категории для этого примера, поэтому метод базы данных гораздо полезнее и проще в обслуживании.
Если это за пределами того уровня, который вам нужен, вам нужно будет использовать карту и такую категорию, как эта:
[
["brown", "Markus, David, Thomas"],
["black", "Stephen, Paul"],
["blonde", "Simon"]
]
<category>
<pattern>WHO HAS * HAIR</pattern>
<template>
<map name="hair"><star/></map>
</template>
</category>
Однако это далеко не так гибко при использовании структуры стиля базы данных.
Человек - у кого каштановые волосы?
Бот - Маркус, Дэвид, Томас
Если вы планируете сделать это, вы можете просто сделать:
<category>
<pattern>WHO HAS BROWN HAIR</pattern>
<template>
Markus, David, Thomas.
</template>
</category>
Надеюсь, что это имеет смысл. Рад что-нибудь прояснить, если понадоблюсь.