在AIML中,如果我有多个文件匹配相同的模式,我如何在一个文件中优先匹配?
发布于 2016-06-08 15:34:44
您应该使用AIML的通配符来控制模式匹配的优先级。
AIML 1.0只有*和_来匹配一个或多个单词。AIML 2.0添加^和#以匹配0个或更多个单词。
下面是AIML 2.0通配符的优先级等级,从最高匹配优先级到最低匹配优先级。
<代码>H19“^”:0或更多单词<代码>H210<代码>H111“*”:1或更多单词<代码>H212<代码>G213
有关详细信息,请参阅AIML 2.0 working draft,特别是5.A.Zero章节或通配符的更多字通配符和优先级描述。
发布于 2017-11-14 13:30:27

AIML 1.0通配符*和_被定义为匹配一个或多个单词。AIML 2.0引入了两个新的通配符,^和#,用于匹配零个或多个单词。作为一个简写描述,我们将这些通配符称为“zero+通配符”。^和#都定义为匹配0个或多个单词。它们之间的差异与*和_之间的差异相同。匹配运算符的匹配优先级最高,其次是_,然后是精确单词匹配,然后是^,最后是*,匹配优先级最低。在定义zero+通配符时,有必要考虑当通配符匹配长度为零时(以及和)的值应该是什么。在AIML 2.0中,我们把这个问题留给了僵尸管理员。每个bot都可以有一个名为nullstar的全局属性,僵尸主机可以将该属性设置为“”、“未知”或任何其他值。What’s new in AIML 2.0?
发布于 2016-04-08 16:55:46
Alice站点有以下关于如何确定优先级的说明:
在每个节点上,"_“具有第一优先级,原子词匹配第二优先级,"*”匹配最低优先级。模式不需要按字母顺序排序,只需部分排序,以便"_“在任何单词之前,"*”在任何单词之后。
From 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的优先级第二,*的优先级最后。
https://stackoverflow.com/questions/36351281
复制相似问题