2016-04-01 2 views

Répondre

1

Le site Alice a les notes suivantes sur la façon dont la priorité est déterminée:

  1. A chaque nœud, le « _ » a priorité, une correspondance de mot atomique deuxième priorité, et un « * » correspondre à la priorité la plus basse.

  2. Les motifs n'ont pas besoin d'être classés par ordre alphabétique, seulement partiellement commandés de sorte que "_" précède tout mot et "*" après n'importe quel mot.

  3. La correspondance est un mot à la fois, pas une catégorie par catégorie.

  4. L'algorithme combine la forme d'entrée, le motif et le motif en une seule « chemin » ou phrase telle que: « PATTERN ce sujet » et traite les jetons et comme des mots ordinaires. Les modèles PATTERN, THAT et TOPIC peuvent contenir plusieurs caractères génériques.

  5. L'algorithme de mise en correspondance est une version très restreinte de la recherche approfondie en profondeur, également appelée retour arrière.

  6. Vous pouvez simplifier l'algorithme en supprimant le caractère générique "_" et en ne considérant que les deux étapes suivantes. Essayez aussi de comprendre le cas simple de PATTERN sans et.

From Alicebot.org

Sur cette base, vous pouvez utiliser le '_' pour donner presidence quelque chose. Prenons l'exemple suivant:

<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> 

Le _ prend la plus haute priorité étant adaptée en premier. Le BAR simple est le deuxième en priorité et le * est le dernier.

2

Vous devez utiliser les caractères génériques d'AIML pour contrôler la priorité de la correspondance de modèle.

AIML 1.0 n'a que * et _ pour faire correspondre 1 ou plusieurs mots. AIML 2.0 ajoute^et # pour correspondre à 0 ou plusieurs mots. Ci-dessous figure le rang de priorité des caractères génériques AIML 2.0, de la priorité de correspondance la plus élevée à la plus faible.

  1. "$": indique que le mot a maintenant la priorité correspondant supérieur à "_"
  2. "#": 0 ou plusieurs mots
  3. "_": 1 ou plusieurs mots
  4. mot: exacte mot correspondance
  5. "^": 0 ou plusieurs mots
  6. "*": 1 ou plusieurs mots

S'il vous plaît voir AIML 2.0 working draft pour plus de détails, en particulier le chapitre 5.A.Zéro ou plus de caractères génériques pour les caractères génériques et la description de la priorité.

+0

Existe-t-il un moyen de faire correspondre un ensemble de mots? Par exemple, pouvez-vous [jump | shout | run], ou dois-je définir trois règles différentes pour eux? – Juan

1

Hope this helps you

Les wildcards AIML 1.0 * et _ sont définis de manière à ce qu'ils correspondent un ou plusieurs mots. AIML 2.0 introduit deux nouveaux caractères génériques,^et #, définis pour correspondre à zéro ou plusieurs mots. Comme une description abrégée, nous nous référons à ceux-ci comme "zero + wildcards". ^ et # sont définis pour correspondre à 0 ou plusieurs mots. La différence entre eux est la même que la différence entre * et _. L'opérateur # correspondant a la plus haute priorité dans la correspondance, suivi de _, suivi d'une correspondance de mot exacte, suivie de ^, et enfin * a la priorité de correspondance la plus basse. Lors de la définition d'un caractère générique zéro +, il est nécessaire de prendre en compte la valeur de (ainsi que et) lorsque la correspondance générique a une longueur nulle. Dans AIML 2.0, nous laissons cela au botmaster. Chaque bot peut avoir une propriété globale nommée nullstar que le botmaster peut définir "", "unknown", ou toute autre valeur. What’s new in AIML 2.0?