【发布时间】:2016-04-01 08:12:52
【问题描述】:
在 AIML 中,如果我有多个文件匹配同一个模式,我怎样才能在一个文件中优先匹配?
【问题讨论】:
标签: artificial-intelligence aiml
在 AIML 中,如果我有多个文件匹配同一个模式,我怎样才能在一个文件中优先匹配?
【问题讨论】:
标签: artificial-intelligence aiml
您应该使用 AIML 的通配符来控制模式匹配的优先级。
AIML 1.0 只有 * 和 _ 来匹配 1 个或多个单词。 AIML 2.0 添加了 ^ 和 # 来匹配 0 个或多个单词。
下面是 AIML 2.0 通配符的优先级,从最高匹配优先级到最低。
详情请见AIML 2.0 working draft,具体章节5.A.Zero or more words wildcards了解通配符和优先级说明。
【讨论】:
定义了 AIML 1.0 通配符 * 和 _,以便它们匹配一个或多个单词。 AIML 2.0 引入了两个新的通配符 ^ 和 #,定义为匹配零个或多个单词。作为简写描述,我们将这些称为“零+通配符”。 ^ 和 # 都被定义为匹配 0 个或多个单词。它们之间的区别与*和_之间的区别相同。 # 匹配运算符在匹配中的优先级最高,其次是_,其次是完全匹配的单词,其次是^,最后是* 的匹配优先级最低。 在定义零+通配符时,有必要考虑当通配符匹配的长度为零时(以及和)的值应该是什么。在 AIML 2.0 中,我们将其留给机器人管理员。每个机器人都可以有一个名为 nullstar 的全局属性,机器人管理员可以将其设置为“”、“未知”或任何其他值。 What’s new in AIML 2.0?
【讨论】:
Alice 网站对如何确定优先级有以下说明:
在每个节点上,“_”具有第一优先级,原子词匹配第二优先级,“*”匹配最低优先级。
模式不需要按字母顺序排列,只需部分排序,以便“_”出现在任何单词之前,“*”出现在任何单词之后。
匹配是逐字的,而不是逐类的。
该算法将输入模式、模式和模式组合成单个“路径”或句子,例如:“PATTERN 那个主题”并处理令牌和 像普通话一样。 PATTERN、THAT 和 TOPIC 模式可能包含 多个通配符。
匹配算法是深度优先搜索的高度受限版本,也称为回溯。
您可以通过删除“_”通配符并仅考虑后两个步骤来简化算法。也尝试理解 没有 and 的 PATTERN 的简单案例。
在此基础上,您可以使用 '_' 来表示某事的重要性。举个例子:
<category>
<pattern>_ BAR</pattern>
<template>Which bar?</template>
</category>
<category>
<pattern>FOO BAR</pattern>
<template>Don't you mean FUBAR? That's an old military acronym, that roughly translates to "broken". I can't directly translate it because I don't curse.</template>
</category>
<category>
<pattern>* BAR</pattern>
<template>There are a lot of bars. There's a crow bar, the state bar, a bar for drinking, and foo bar.</template>
</category>
_ 优先匹配最高优先级。简单的BAR 排在第二位,* 排在最后。
【讨论】: