【问题标题】:in AIML, can I give priority to the pattern matching在AIML中,我可以优先考虑模式匹配吗
【发布时间】:2016-04-01 08:12:52
【问题描述】:

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

【问题讨论】:

    标签: artificial-intelligence aiml


    【解决方案1】:

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

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

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

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

    详情请见AIML 2.0 working draft,具体章节5.A.Zero or more words wildcards了解通配符和优先级说明。

    【讨论】:

    • 有没有办法匹配一组单词中的任何一个?例如,你能[jump|shout|run],还是我必须为它们定义三个不同的规则?
    • 是的,带有 标签。在您的示例中,将一个名为“moves.txt”(或其他)的文件放入机器人的“sets”目录中。那么你的模式就是“can you moves”。 IMO 在这里重用关键字“set”是不直观的,因为“set”现在在不同的上下文中意味着不同的东西。但这就是他们所做的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      4. 该算法将输入模式、模式和模式组合成单个“路径”或句子,例如:“PATTERN 那个主题”并处理令牌和 像普通话一样。 PATTERN、THAT 和 TOPIC 模式可能包含 多个通配符。

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

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

      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 排在第二位,* 排在最后。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-25
        • 2017-01-08
        • 2017-11-01
        • 2017-08-27
        • 2014-07-21
        • 2021-02-12
        • 1970-01-01
        相关资源
        最近更新 更多