3

在 AIML 中,如果我有多个文件匹配相同的模式,我怎样才能优先匹配一个文件?

4

3 回答 3

4

您应该使用 AIML 的通配符来控制模式匹配的优先级。

AIML 1.0 只有 * 和 _ 来匹配 1 个或多个单词。AIML 2.0 添加了 ^ 和 # 来匹配 0 个或多个单词。

下面是 AIML 2.0 通配符的优先级,从最高匹配优先级到最低。

  1. "$" : 表示该词现在的匹配优先级高于 "_"
  2. "#" : 0 个或多个单词
  3. "_" : 1 个或多个单词
  4. word : 完全匹配的单词
  5. "^" : 0 个或多个单词
  6. "*" : 1 个或多个单词

详情请参见AIML 2.0 工作草案,具体章节5.A.Zero or more words wildcards for wildcards 和优先级描述。

于 2016-06-08T07:34:44.093 回答
2

希望这可以帮助你

AIML 1.0 通配符 * 和 _ 被定义为匹配一个或多个单词。AIML 2.0 引入了两个新的通配符 ^ 和 #,定义为匹配零个或多个单词。作为简写描述,我们将它们称为“零+通配符”。^ 和 # 都被定义为匹配 0 个或多个单词。它们之间的区别与*和_之间的区别相同。# 匹配运算符在匹配中具有最高优先级,其次是_,其次是完全匹配的单词,其次是^,最后*具有最低匹配优先级。在定义零+通配符时,有必要考虑当通配符匹配的长度为零时(以及和)的值应该是什么。在 AIML 2.0 中,我们将其留给机器人管理员。每个机器人都可以有一个名为 nullstar 的全局属性,botmaster 可以将其设置为“”、“未知”或任何其他值。 AIML 2.0 有什么新功能?

于 2017-11-14T05:30:26.783 回答
1

Alice 站点对如何确定优先级有以下说明:

  1. 在每个节点上,“_”具有第一优先级,原子词匹配第二优先级,“*”匹配最低优先级。

  2. 这些模式不需要按字母顺序排列,只需部分排序,以便“_”出现在任何单词之前,“*”出现在任何单词之后。

  3. 匹配是逐词的,而不是逐类的。

  4. 该算法将输入模式、模式和模式组合成单个“路径”或句子,例如:“PATTERN THAT TOPIC”,并将标记和普通单词一样对待。PATTERN、THAT 和 TOPIC 模式可能包含多个通配符。

  5. 匹配算法是深度优先搜索的高度受限版本,也称为回溯。

  6. 您可以通过删除“_”通配符来简化算法,并只考虑后两个步骤。还可以尝试理解没有 and 的 PATTERN 的简单情况。

来自 Alicebot.org

在此基础上,您可以使用“_”来表示某些东西。举个例子:

<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是第二优先,*最后是。

于 2016-04-08T08:55:45.937 回答