【问题标题】:AIML recognizing middle letter of any wordAIML 识别任何单词的中间字母
【发布时间】:2022-11-30 23:15:06
【问题描述】:

在 aiml 中,我试图让我的机器人识别任何单词的中间字母。例如,如果我问“猫的中间字母是什么”,那么它应该回答“A”,这就是代码的样子

<category><pattern>MIDDLELETTER *</pattern>
<template>The middle letter of <star/> is: <srai>MIDDLEITEM <explode><star/></explode></srai></template>
</category>

<category><pattern>MIDDLEITEM * * *</pattern>
<template><srai>MIDDLEITEM <star index="2"/></srai></template>
</category>

<category><pattern>MIDDLEITEM *</pattern>
<template><star/></template>
</category>

上面的代码在这种情况下工作正常

HUMAN: MIDDLELETTER CAT
ROBOT: The middle letter of CAT is: A
HUMAN: MIDDLELETTER SKY
ROBOT: The middle letter of SKY is: K

但在这种情况下不能正常工作

HUMAN: MIDDLELETTER ROMAN
ROBOT: The middle letter of ROMAN is: O
HUMAN: MIDDLELETTER DCNOVAN
ROBOT: The middle letter of DCNOVAN is: C

我期待这些结果

HUMAN: MIDDLELETTER ROMAN
ROBOT: The middle letter of ROMAN is: M
HUMAN: MIDDLELETTER DCNOVAN
ROBOT: The middle letter of DCNOVAN is: O

还有,如果一个单词有8个字母怎么办?我期待让它像

HUMAN: MIDDLELETTER ABSOLUTE
ROBOT: The middle letter of ABSOLUTE could be either O or L

我的代码中缺少什么?

【问题讨论】:

    标签: aiml


    【解决方案1】:

    要找到中间的字母,您需要将单词分解成单独的字母并算出单词的长度。然后,您可以使用单词的长度来找到中间的字母。

    这个方法会起作用。为了兼容性,我假设你的 bot ie 部门没有数学能力。它适用于 11 个字母长的字母。对于较长的单词,您应该将单词长度除以 2 以找到单词的中间字母。

    <category>
    <pattern>MIDDLELETTER *</pattern>
    <template>
        <think>
            <set name="letternum">0</set>
            <srai>BreakUpWord <explode><star/></explode></srai>
            <condition name="letternum">
                <li value="1"><set var="middle"><get name="char1"/></set></li>
                <li value="2"><set var="middle"><get name="char1"/> or <get name="char2"/></set></li>
                <li value="3"><set var="middle"><get name="char2"/></set></li>
                <li value="4"><set var="middle"><get name="char2"/> or <get name="char3"/></set></li>
                <li value="5"><set var="middle"><get name="char3"/></set></li>
                <li value="6"><set var="middle"><get name="char3"/> or <get name="char4"/></set></li>
                <li value="7"><set var="middle"><get name="char4"/></set></li>
                <li value="8"><set var="middle"><get name="char4"/> or <get name="char5"/></set></li>
                <li value="9"><set var="middle"><get name="char5"/></set></li>
                <li value="10"><set var="middle"><get name="char5"/> or <get name="char6"/></set></li>
                <li value="11"><set var="middle"><get name="char6"/></set></li>
            </condition>
        </think>
        The middle letter of <star/> is <get var="middle"/>.
    </template>
    </category>
    
    <category>
    <pattern>BREAKUPWORD * *</pattern>
    <template>
        <set name="letternum"><map name="successor"><get name="letternum"/></map></set>
        <set><name>char<get name="letternum"/></name><star/></set>
        <srai>BREAKUPWORD <star index="2"/></srai>
    </template>
    </category>
    
    <category>
    <pattern>BREAKUPWORD *</pattern>
    <template>
        <set name="letternum"><map name="successor"><get name="letternum"/></map></set>
        <set><name>char<get name="letternum"/></name><star/></set>
    </template>
    </category>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多