在AIML中,如果我有多个文件匹配相同的模式,我怎样才能在一个文件中给出匹配的优先权?
答案 0 :(得分:2)
您应该使用AIML的通配符来控制模式匹配的优先级。
AIML 1.0只有*和_来匹配1个或多个单词。 AIML 2.0添加^和#以匹配0个或更多单词。
以下是AIML 2.0通配符的优先级,从最高匹配优先级到最低匹配优先级。
有关详细信息,请参阅AIML 2.0 working draft,特别是章节 5.A.Zero或更多单词通配符,以获取通配符和优先级说明。
答案 1 :(得分:1)
Alice网站有关于如何确定优先级的以下注释:
在每个节点,“_”具有第一优先级,原子字匹配第二优先级,“*”匹配最低优先级。
模式不需要按字母顺序排序,只需部分排序,以便“_”出现在任何单词之前,“*”出现在任何单词之后。
匹配是逐字逐句,而不是逐个类别。
该算法将输入模式,模式和模式组合成单个“路径”或句子,例如:“PATTERN 那个主题“并且对待令牌和 像普通的话。 PATTERN,THAT和TOPIC模式可能包含 多个通配符。
匹配算法是深度优先搜索的高度限制版本,也称为回溯。
- 醇>
您可以通过删除“_”通配符来简化算法,并仅考虑后两步。也尝试了解 没有和的PATTERNs的简单情况。
基于此,您可以使用'_'来提供一些总统。请看以下示例:
<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
优先级第二,*
最后。
答案 2 :(得分:1)
定义AIML 1.0通配符*和_,以便它们匹配一个或多个单词。 AIML 2.0引入了两个新的通配符^和#,定义为匹配零个或多个单词。作为简写描述,我们将这些称为“零+通配符”。 ^和#都被定义为匹配0个或更多个单词。它们之间的差异与*和_之间的差异相同。 #matching运算符在匹配时具有最高优先级,后跟_,后跟精确的单词匹配,后跟^,最后*具有最低的匹配优先级。 定义零+通配符时,有必要考虑通配符匹配长度为零时(以及和)的值。在AIML 2.0中,我们将其留给了botmaster。每个机器人都可以拥有一个名为nullstar的全局属性,botmaster可以将其设置为“”,“unknown”或任何其他值。 What’s new in AIML 2.0?