AIML - Guide rapide

AIML signifie Artificial Intelligence Markup Language. AIML a été développé par la communauté du logiciel libre Alicebot et le Dr Richard S. Wallace entre 1995 et 2000. AIML est utilisé pour créer ou personnaliser Alicebot qui est une application de boîte de discussion basée sur le logiciel libre ALICE (Artificial Linguistic Internet Computer Entity).

Balises AIML

Voici les balises importantes qui sont couramment utilisées dans les documents AIML.

S.No. Balise / Description AIML
1

<aiml>

Définit le début et la fin d'un document AIML.

2

<category>

Définit le unit of knowledge dans la base de connaissances d'Alicebot.

3

<pattern>

Définit le modèle correspondant à ce qu'un utilisateur peut entrer dans un Alicebot.

4

<template>

Définit la réponse d'un Alicebot à l'entrée de l'utilisateur.

Nous discuterons de chacune de ces balises dans le chapitre Balises AIML Basic .

Voici quelques-unes des autres balises aiml largement utilisées. Nous discuterons de chaque balise en détail dans les prochains chapitres.

S.No. Balise / Description AIML
1

<star>

Utilisé pour correspondre au caractère générique * caractère (s) dans la balise <pattern>.

2

<srai>

Balise polyvalente, utilisée pour appeler / faire correspondre les autres catégories.

3

<random>

Utilisé <random> pour obtenir des réponses aléatoires.

4

<li>

Utilisé pour représenter plusieurs réponses.

5

<set>

Utilisé pour définir la valeur dans une variable AIML.

6

<get>

Utilisé pour obtenir une valeur stockée dans une variable AIML.

sept

<that>

Utilisé dans AIML pour répondre en fonction du contexte.

8

<topic>

Utilisé dans AIML pour stocker un contexte afin qu'une conversation ultérieure puisse être effectuée en fonction de ce contexte.

9

<think>

Utilisé dans AIML pour stocker une variable sans avertir l'utilisateur.

dix

<condition>

Similaire aux instructions switch dans le langage de programmation. Cela aide ALICE à répondre aux entrées correspondantes.

Vocabulaire AIML

Le vocabulaire AIML utilise des mots, des espaces et deux caractères spéciaux * et _comme jokers. L'interpréteur AIML donne la préférence au modèle ayant_ que le modèle ayant *. Les balises AIML sont compatibles XML et les modèles sont insensibles à la casse.

Exemple

<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> HELLO ALICE </pattern>
      
      <template>
         Hello User!
      </template>
      
   </category>
</aiml>

Voici les points importants à considérer -

  • <aiml> La balise signifie le début du document AIML.

  • <category> tag définit l'unité de connaissances.

  • <pattern> La balise définit le modèle que l'utilisateur va saisir.

  • <template> La balise définit la réponse à l'utilisateur si l'utilisateur tape Hello Alice.

Résultat

User: Hello Alice
Bot: Hello User

Ce tutoriel vous guidera sur la façon de préparer un environnement de développement pour commencer votre travail avec AIML pour créer un logiciel de chat automatique. Le programme AB est une implémentation de référence d'AIML 2.0 développée et maintenue par ALICE AI Foundation. Ce tutoriel vous apprendra également comment configurer JDK, avant de configurer la bibliothèque Program AB -

Étape 1 - Configurer le kit de développement Java (JDK)

Vous pouvez télécharger la dernière version du SDK à partir du site Java d'Oracle - Téléchargements Java SE . Vous trouverez des instructions pour installer JDK dans les fichiers téléchargés, suivez les instructions données pour installer et configurer la configuration. Enfin, définissez les variables d'environnement PATH et JAVA_HOME pour faire référence au répertoire qui contient java et javac, généralement rép_install_java / bin et rép_install_java respectivement.

Si vous exécutez Windows et avez installé le JDK dans C: \ jdk1.7.0_75, vous devrez mettre la ligne suivante dans votre fichier C: \ autoexec.bat.

set PATH = C:\jdk1.7.0_75\bin;%PATH%
set JAVA_HOME = C:\jdk1.7.0_75

Sinon, sous Windows NT / 2000 / XP, vous pouvez également cliquer avec le bouton droit de la souris sur Poste de travail, sélectionner Propriétés, puis Avancé, puis Variables d'environnement. Ensuite, vous mettriez à jour la valeur PATH et appuyez sur le bouton OK.

Sous Unix (Solaris, Linux, etc.), si le SDK est installé dans /usr/local/jdk1.7.0_75 et que vous utilisez le shell C, vous mettriez ce qui suit dans votre fichier .cshrc.

setenv PATH /usr/local/jdk1.7.0_75/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.7.0_75

Sinon, si vous utilisez un environnement de développement intégré (IDE) tel que Borland JBuilder, Eclipse, IntelliJ IDEA ou Sun ONE Studio, compilez et exécutez un programme simple pour confirmer que l'EDI sait où vous avez installé Java, sinon effectuez la configuration appropriée comme document donné de l'IDE.

Étape 2 - Configurer le programme AB

Maintenant, si tout va bien, vous pouvez procéder à la configuration de votre programme AB. Voici les étapes simples pour télécharger et installer la bibliothèque sur votre machine.

  • Choisissez si vous souhaitez installer AIML sous Windows ou Unix, puis passez à l'étape suivante pour télécharger le fichier .zip

  • Téléchargez la dernière version des binaires Program AB à partir de https://code.google.com/p/program-ab/en utilisant son lien program-ab-0.0.4.3.zip .

  • Au moment de la rédaction de ce tutoriel, j'ai téléchargé program-ab-0.0.4.3.zip sur ma machine Windows et lorsque vous décompressez le fichier téléchargé, il vous donnera la structure de répertoires dans C: \ ab comme suit.

S.No. Répertoire et description
1

c:/ab/bots

Stocke les bots AIML

2

c:/ab/lib

Stocke les bibliothèques Java

3

c:/ab/out

Répertoire de fichiers de classe Java

4

c:/ab/run.bat

fichier de commandes pour exécuter le programme AB

Une fois que vous avez terminé cette dernière étape, vous êtes prêt à poursuivre votre premier exemple AIML que vous verrez dans le chapitre suivant.

Commençons par créer le premier bot qui accueillera simplement un utilisateur avec Hello User! quand un utilisateur tape Hello Alice.

Créer la structure du projet

Comme dans la configuration de l'environnement AIML , nous avons extrait le contenu de program-ab dansC > ab avec la structure de répertoires suivante.

S.No. Répertoire et description
1

c:/ab/bots

Stocke les bots AIML

2

c:/ab/lib

Stocke les bibliothèques Java

3

c:/ab/out

Répertoire de fichiers de classe Java

4

c:/ab/run.bat

fichier de commandes pour exécuter le programme AB

Maintenant, créez un test de répertoire à l'intérieur C > ab > bots et créez-y les répertoires suivants.

S.No. Répertoire et description
1

c:/ab/bots/test/aiml

Stocke les fichiers AIML

2

c:/ab/bots/test/aimlif

Stocke les fichiers AIMLIF

3

c:/ab/bots/test/config

Stocke les fichiers de configuration

4

c:/ab/bots/test/sets

Stocke les ensembles AIML

5

c:/ab/bots/test/maps

Stocke les cartes AIML

Créer des fichiers source

Créez test.aiml à l'intérieur C > ab > bots > test > aiml et test.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

test.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version="1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> HELLO ALICE </pattern>
      
      <template>
         Hello User
      </template>
      
   </category>
</aiml>

test.aiml.csv

0,HELLO ALICE,*,*,Hello User,test.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Working Directory = C:\ab

Program AB 0.0.4.2 beta -- AI Foundation Reference AIML 2.0 implementation
bot = test
action = chat
trace = false
trace mode = false
Name = test Path = C:\ab/bots/test

C:\ab
C:\ab/bots
C:\ab/bots/test
C:\ab/bots/test/aiml
C:\ab/bots/test/aimlif
C:\ab/bots/test/config
C:\ab/bots/test/logs
C:\ab/bots/test/sets
C:\ab/bots/test/maps

Preprocessor: 0 norms 0 persons 0 person2
Get Properties: C:\ab/bots/test/config/properties.txt
addAIMLSets: C:\ab/bots/test/sets does not exist.
addCategories: C:\ab/bots/test/aiml does not exist.
AIML modified Tue Apr 07 22:24:29 IST 2015 AIMLIF modified Tue Apr 07 22:26:53 I
ST 2015
No deleted.aiml.csv file found
No deleted.aiml.csv file found
Loading AIML files from C:\ab/bots/test/aimlif

Reading Learnf file
Loaded 1 categories in 0.009 sec
--> Bot test 1 completed 0 deleted 0 unfinished
(1[6])--HELLO-->(1[5])--ALICE-->(1[4])--<THAT>-->(1[3])--*-->(1[2])--<TOPIC>-->(
1[1])--*-->(0[null,null]) Hello User...
7 nodes 6 singletons 1 leaves 0 shortcuts 0 n-ary 6 branches 0.85714287 average
branching
Human:

Type Hello Alice et voir le résultat, puis tapez tout autre chose pour voir le résultat modifié.

Human: hello alice
Robot: Hello User
Human: bye
Robot: I have no answer for that.
Human:

Dans ce didacticiel, nous aborderons les balises de base d'AIML.

  • <aiml> - définit le début et la fin d'un document AIML.

  • <category> - définit le unit of knowledge dans la base de connaissances d'Alicebot.

  • <pattern> - définit le modèle pour correspondre à ce qu'un utilisateur peut entrer dans un Alicebot.

  • <template> - définit la réponse d'un Alicebot à l'entrée de l'utilisateur.

Les fichiers AIML suivants ont été utilisés ici comme référence.

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> HELLO ALICE </pattern>
      
      <template>
         Hello User
      </template>
      
   </category>
</aiml>

Balise <aiml>

La balise <aiml> marque le début et la fin d'un document AIML. Il contient des informations de version et de codage sous les attributs de version et de codage. L'attribut version stocke la version AIML utilisée par ALICE chatterbot Knowledge Base, KB. Par exemple, nous avons utilisé la version 1.0.1. Cet attribut est facultatif.

Les attributs de codage fournissent les jeux de caractères à utiliser dans le document. Par exemple, nous avons utilisé UTF-8. La balise <aiml> doit contenir au moins une balise <category>. Nous pouvons créer plusieurs fichiers AIML où chaque fichier AIML contient une seule balise <aiml>. Le but de chaque fichier AIML est d'ajouter au moins une seule unité de connaissances appelée catégorie à ALICE chatterbot KB.

<aiml version = "1.0.1" encoding = "UTF-8"?>
   ...
</aiml>

Balise <category>

La balise <category> est l'unité de connaissance fondamentale d'un bot ALICE. Chaque catégorie contient -

  • L'entrée utilisateur sous la forme d'une phrase qui peut être une assertion, une question et une exclamation, etc. L'entrée utilisateur peut contenir des caractères génériques comme * et _.

  • Réponse à l'entrée utilisateur présentée par Alicebot.

  • Contexte facultatif.

UNE <category> la balise doit avoir <pattern> et <template> marque. <pattern> représente l'entrée utilisateur et le modèle représente la réponse du bot.

<category>
   <pattern> HELLO ALICE </pattern>
   
   <template>
      Hello User
   </template>
   
</category>

Ici, si l'utilisateur entre Hello Alice alors le bot répondra comme Hello User.

Balise <pattern>

La balise <pattern> représente l'entrée d'un utilisateur. Il doit s'agir de la première balise de la balise <category>. La balise <pattern> peut contenir un caractère générique pour correspondre à plus d'une phrase comme entrée utilisateur. Par exemple, dans notre exemple, <pattern> contient HELLO ALICE.

AIML est insensible à la casse. Si un utilisateur entre Hello Alice, Hello Alice, HELLO ALICE etc., toutes les entrées sont valides et le bot les comparera à HELLO ALICE.

<category>
   <pattern> HELLO ALICE </pattern>
   
   <template>
      Hello User
   </template>
   
</category>

Ici, le modèle est "Hello User" et représente la réponse d'un robot à l'entrée de l'utilisateur.

Balise <template>

La balise <template> représente la réponse du bot à l'utilisateur. Il doit s'agir de la deuxième balise de la balise <category>. Cette balise <template> peut enregistrer des données, appeler un autre programme, donner des réponses conditionnelles ou déléguer à d'autres catégories.

<category>
   <pattern> HELLO ALICE </pattern>
   
   <template>
      Hello User
   </template>
   
</category>

Ici, le modèle est "Hello User" et représente la réponse d'un robot à l'entrée de l'utilisateur.

<star> La balise est utilisée pour correspondre au caractère générique * caractère (s) dans la balise <modèle>.

Syntaxe

<star index = "n"/>

n signifie la position de * dans l'entrée utilisateur dans <pattern> Tag.

Prenons l'exemple suivant -

<category>
   <pattern> A * is a *. </pattern>
   
   <template>
      When a <star index = "1"/> is not a <star index = "2"/>?
   </template>
   
</category>

Si l'utilisateur entre "Une mangue est un fruit." alors bot répondra comme "Quand une mangue n'est pas un fruit?"

Exemple

Créer star.aiml à l'intérieur C > ab > bots > test > aiml et star.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

star.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   
   <category>
      <pattern>I LIKE *</pattern>
      <template>
         I too like <star/>.
      </template>
   </category>
   
   <category>
      <pattern>A * IS A *</pattern>
      <template>
         How <star index = "1"/> can not be a <star index = "2"/>?
      </template>
   </category>
   
</aiml>

star.aiml.csv

0,I LIKE *,*,*,I too like <star/>.,star.aiml
0,A * IS A *,*,*,How <star index = "1"/> can not be a <star index = "2"/>?,star.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: I like mango
Robot: I too like mango.
Human: A mango is a fruit
Robot: How mango can not be a fruit?

<star index = "1" /> est souvent utilisé comme <star />

<srai>La balise est une balise polyvalente. Cette balise permet à AIML de définir les différentes cibles pour le même modèle.

Syntaxe

<srai> pattern </srai>

Voici les termes couramment utilisés associés à srai -

  • Réduction symbolique

  • Diviser et conquérir

  • Résolution des synonymes

  • Détection de mots-clés

Réduction symbolique

La technique de réduction symbolique est utilisée pour simplifier les motifs. Il aide à réduire les modèles grammaticaux complexes avec des modèles simples.

Par exemple, considérez la conversation suivante.

Human: Who was Albert Einstein?
Robot: Albert Einstein was a German physicist.
Human: Who was Isaac Newton?
Robot: Isaac Newton was a English physicist and mathematician.

Maintenant What if les questions sont soulevées comme

Human: DO YOU KNOW WHO Albert Einstein IS?
Human: DO YOU KNOW WHO Isaac Newton IS?

Ici, <srai> la balise fonctionne. Il peut prendre le modèle de l'utilisateur comme modèle.

Étape 1: créer des catégories

<category>
   <pattern>WHO IS ALBERT EINSTEIN?</pattern>
   <template>Albert Einstein was a German physicist.</template>
</category>

<category>
   <pattern> WHO IS Isaac NEWTON? </pattern>
   <template>Isaac Newton was a English physicist and mathematician.</template>
</category>

Étape 2: Créer une catégorie générique à l'aide de la balise <srai>

<category>
   <pattern>DO YOU KNOW WHO * IS?</pattern>
   
   <template>
      <srai>WHO IS <star/></srai>
   </template>
   
</category>

Exemple

Créez srai.aiml à l'intérieur C > ab > bots > test > aiml et srai.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

srai.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> WHO IS ALBERT EINSTEIN </pattern>
      <template>Albert Einstein was a German physicist.</template>
   </category>
   
   <category>
      <pattern> WHO IS Isaac NEWTON </pattern>
      <template>Isaac Newton was a English physicist and mathematician.</template>
   </category>
   
   <category>
      <pattern>DO YOU KNOW WHO * IS</pattern>
      <template>
         <srai>WHO IS <star/></srai>
      </template>
   </category>
</aiml>

star.aiml.csv

0,WHO IS ALBERT EINSTEIN,*,*,Albert Einstein was a German physicist.,srai.aiml
0,WHO IS Isaac NEWTON,*,*,Isaac Newton was a English physicist and mathematician.,srai.aiml
0,DO YOU KNOW WHO * IS,*,*,<srai>WHO IS <star/></srai>,srai.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: Do you know who Albert Einstein is
Robot: Albert Einstein was a German physicist.

Diviser et conquérir

Divide and Conquer est utilisé pour réutiliser des sous-phrases pour faire une réponse complète. Cela aide à réduire la définition de plusieurs catégories.

Par exemple, envisagez de suivre la conversation.

Human: Bye
Robot: GoodBye!
Human: Bye Alice!
Robot: GoodBye!

Maintenant, ici, le robot devrait répondre GoodBye! Chaque fois qu'un utilisateur dit Bye au début de la phrase.

Mettons la balise <srai> pour fonctionner ici.

Étape 1: créer une catégorie

<category>
   <pattern>BYE</pattern>
   <template>Good Bye!</template>
</category>

Étape 2: Créer une catégorie générique à l'aide de la balise <srai>

<category>
   <pattern>BYE *</pattern>
   
   <template>
      <srai>BYE</srai>
   </template>
   
</category>

Exemple

Mettre à jour srai.aiml à l'intérieur C > ab > bots > test > aiml et srai.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

srai.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> WHO IS ALBERT EINSTEIN </pattern>
      <template>Albert Einstein was a German physicist.</template>
   </category>
 
   <category>
      <pattern> WHO IS Isaac NEWTON </pattern>
      <template>Isaac Newton was a English physicist and mathematician.</template>
   </category>
   
   <category>
      <pattern>DO YOU KNOW WHO * IS</pattern>
      <template>
         <srai>WHO IS <star/></srai>
      </template>
   </category>
   
   <category>
      <pattern>BYE</pattern>
      <template>Good Bye!</template>
   </category>
   
   <category>
      <pattern>BYE *</pattern>
      <template>
         <srai>BYE</srai>
      </template>
   </category>
   
</aiml>

star.aiml.csv

0,WHO IS ALBERT EINSTEIN,*,*,Albert Einstein was a German physicist.,srai.aiml
0,WHO IS Isaac NEWTON,*,*,Isaac Newton was a English physicist and mathematician.,srai.aiml
0,DO YOU KNOW WHO * IS,*,*,<srai>WHO IS <star/></srai>,srai.aiml
0,BYE,*,*,Good Bye!,srai.aiml
0,BYE *,*,*,<srai>BYE</srai>,srai.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: Bye
Robot: GoodBye!
Human: Bye Alice!
Robot: GoodBye!

Synonymes Résolution

Les synonymes sont des mots avec des significations similaires. Un bot doit répondre de la même manière pour des mots similaires.

Par exemple, considérez la conversation suivante.

Human: Factory
Robot: Development Center!
Human: Industry
Robot: Development Center!

Maintenant, ici, le robot devrait répondre Development Center! chaque fois qu'un utilisateur dit Factory ou Industry.

Mettons <srai> tag pour travailler ici.

Étape 1: créer une catégorie

<category>
   <pattern>FACTORY</pattern>
   <template>Development Center!</template>
</category>

Étape 2: Créer une catégorie générique à l'aide de la balise <srai>

<category>
   <pattern>INDUSTRY</pattern>
   
   <template>
      <srai>FACTORY</srai>
   </template>
   
</category>

Exemple

Mettre à jour srai.aiml à l'intérieur C > ab > bots > test > aiml et srai.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

srai.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> WHO IS ALBERT EINSTEIN </pattern>
      <template>Albert Einstein was a German physicist.</template>
   </category>
   
   <category>
      <pattern> WHO IS Isaac NEWTON </pattern>
      <template>Isaac Newton was a English physicist and mathematician.</template>
   </category>
   
   <category>
      <pattern>DO YOU KNOW WHO * IS</pattern>
      <template>
         <srai>WHO IS <star/></srai>
      </template>
   </category>
   
   <category>
      <pattern>BYE</pattern>
      <template>Good Bye!</template>
   </category>
   
   <category>
      <pattern>BYE *</pattern>
      <template>
         <srai>BYE</srai>
      </template>
   </category>
   
   <category>
      <pattern>FACTORY</pattern>
      <template>Development Center!</template>
   </category>
   
   <category>
      <pattern>INDUSTRY</pattern>
      <template>
         <srai>FACTORY</srai>
      </template>
   </category>
   
</aiml>

star.aiml.csv

0,WHO IS ALBERT EINSTEIN,*,*,Albert Einstein was a German physicist.,srai.aiml
0,WHO IS Isaac NEWTON,*,*,Isaac Newton was a English physicist and mathematician.,srai.aiml
0,DO YOU KNOW WHO * IS,*,*,<srai>WHO IS <star/></srai>,srai.aiml
0,BYE,*,*,Good Bye!,srai.aiml
0,BYE *,*,*,<srai>BYE</srai>,srai.aiml
0,FACTORY,*,*,Development Center!,srai.aiml
0,INDUSTRY,*,*,<srai>FACTORY</srai>,srai.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: Factory
Robot: Development Center!
Human: Industry
Robot: Development Center!

Détection de mots-clés

En utilisant srai, nous pouvons renvoyer une réponse simple lorsque l'utilisateur tape un mot-clé spécifique, par exemple, École, peu importe où «école» est présente dans la phrase.

Par exemple, considérez la conversation suivante.

Human: I love going to school daily.
Robot: School is an important institution in a child's life.
Human: I like my school.
Robot: School is an important institution in a child's life.

Ici, le robot doit répondre à un message standard 'School is an important institution in a child's life.' chaque fois qu'un utilisateur a school dans la phrase.

Mettons <srai>tag pour travailler ici. Nous utiliserons des jokers ici.

Étape 1: créer une catégorie

<category>
   <pattern>SCHOOL</pattern>
   <template>School is an important institution in a child's life.</template>
</category>

Étape 2: Créez des catégories génériques à l'aide de la balise <srai>

<category>
   <pattern>_ SCHOOL</pattern>
   <template>
      <srai>SCHOOL</srai>
   </template>
</category>

<category>
   <pattern>_ SCHOOL</pattern>
   <template>
      <srai>SCHOOL</srai>
   </template>
</category>

<category>
   <pattern>SCHOOL *</pattern>
   <template>
      <srai>SCHOOL</srai>
   </template>
</category>

<category>
   <pattern>_ SCHOOL *</pattern>
   <template>
      <srai>SCHOOL</srai>
   </template>
</category>

Exemple

Mettre à jour srai.aiml à l'intérieur C > ab > bots > test > aiml et srai.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

srai.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> WHO IS ALBERT EINSTEIN </pattern>
      <template>Albert Einstein was a German physicist.</template>
   </category>
   
   <category>
      <pattern> WHO IS Isaac NEWTON </pattern>
      <template>Isaac Newton was a English physicist and mathematician.</template>
   </category>
   
   <category>
      <pattern>DO YOU KNOW WHO * IS</pattern>
      <template>
         <srai>WHO IS <star/></srai>
      </template>
   </category>
   
   <category>
      <pattern>BYE</pattern>
      <template>Good Bye!</template>
   </category>
   
   <category>
      <pattern>BYE *</pattern>
      <template>
         <srai>BYE</srai>
      </template>
   </category>
   
   <category>
      <pattern>FACTORY</pattern>
      <template>Development Center!</template>
   </category>
   
   <category>
      <pattern>INDUSTRY</pattern>
      <template>
         <srai>FACTORY</srai>
      </template>
   </category>
   
   <category>
      <pattern>SCHOOL</pattern>
      <template>School is an important institution in a child's life.</template>
   </category>  
   
   <category>
      <pattern>_ SCHOOL</pattern>
      <template>
         <srai>SCHOOL</srai>
      </template>
   </category>
   
   <category>
      <pattern>_ SCHOOL</pattern>
      <template>
         <srai>SCHOOL</srai>
      </template>
   </category>
   
   <category>
      <pattern>SCHOOL *</pattern>
      <template>
         <srai>SCHOOL</srai>
      </template>
   </category>
   
   <category>
      <pattern>_ SCHOOL *</pattern>
      <template>
         <srai>SCHOOL</srai>
      </template>
   </category>
   
</aiml>

star.aiml.csv

0,WHO IS ALBERT EINSTEIN,*,*,Albert Einstein was a German physicist.,srai.aiml
0,WHO IS Isaac NEWTON,*,*,Isaac Newton was a English physicist and mathematician.,srai.aiml
0,DO YOU KNOW WHO * IS,*,*,<srai>WHO IS <star/></srai>,srai.aiml
0,BYE,*,*,Good Bye!,srai.aiml
0,BYE *,*,*,<srai>BYE</srai>,srai.aiml
0,FACTORY,*,*,Development Center!,srai.aiml
0,INDUSTRY,*,*,<srai>FACTORY</srai>,srai.aiml
0,SCHOOL,*,*,School is an important institution in a child's life.,srai.aiml
0,_ SCHOOL,*,*,<srai>SCHOOL</srai>,srai.aiml
0,SCHOOL *,*,*,<srai>SCHOOL</srai>,srai.aiml
0,_ SCHOOL *,*,*,<srai>SCHOOL</srai>,srai.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: I love going to school daily.
Robot: School is an important institution in a child's life.
Human: I like my school.
Robot: School is an important institution in a child's life.

<random>La balise est utilisée pour obtenir des réponses aléatoires. Cette balise permet à AIML de répondre différemment pour la même entrée. La balise <random> est utilisée avec les balises <li>. Les balises <li> contiennent différentes réponses qui doivent être fournies à l'utilisateur de manière aléatoire.

Syntaxe

<random>
   <li> pattern1 </li>
   <li> pattern2 </li>
   ...
   <li> patternN </li>
</random>

Par exemple, considérez la conversation suivante.

Human: Hi
Robot: Hello!
Human: Hi
Robot: Hi! Nice to meet you!

Exemple

Créer random.aiml à l'intérieur C > ab > bots > test > aiml et random.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

random.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding ="UTF-8"?>
   <category>
      <pattern>HI</pattern>
      
      <template>
         <random>
            <li> Hello! </li>
            <li> Hi! Nice to meet you! </li>
         </random>
      </template>
      
   <category>      
</aiml>

random.aiml.csv

0,HI,*,*, <random><li> Hello! </li><li> Hi! Nice to meet you! </li></random>,random.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: Hi
Robot: Hi! Nice to meet you!
Human: Hi
Robot: Hello!

Ici, la réponse peut varier compte tenu des réponses aléatoires.

<set> et <get>Les balises sont utilisées pour travailler avec des variables dans AIML. Les variables peuvent être des variables prédéfinies ou des variables créées par le programmeur.

Syntaxe

La balise <set> est utilisée pour définir une valeur dans une variable.

<set name = "variable-name"> variable-value </set>

La balise <get> est utilisée pour obtenir la valeur d'une variable.

<get name = "variable-name"></get>

Par exemple, considérez la conversation suivante.

Human: I am Mahesh
Robot: Hello Mahesh!
Human: Good Night
Robot: Good Night Mahesh! Thanks for the conversation!

Exemple

Créez setget.aiml à l'intérieur C > ab > bots > test > aiml et setget.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

setget.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern>I am *</pattern>
      <template>
         Hello <set name = "username"> <star/>! </set>
      </template>  
   </category>  
   
   <category>
      <pattern>Good Night</pattern>
      <template>
         Hi <get name = "username"/> Thanks for the conversation!
      </template>  
   </category>  
   
</aiml>

setget.aiml.csv

0,I am *,*,*, Hello <set name = "username"> <star/>! </set>,setget.aiml
0,Good Night,*,*, Hi <get name = "username"/> Thanks for the conversation!,setget.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: I am Mahesh
Robot: Hello Mahesh!
Human: Good Night
Robot: Good Night Mahesh! Thanks for the conversation!

<that> La balise est utilisée dans AIML pour répondre en fonction du contexte.

Syntaxe

<that> template </that>

Par exemple, considérez la conversation suivante.

Human: Hi Alice! What about movies?
Robot: Do you like comedy movies?
Human: No
Robot: Ok! But I like comedy movies.

Exemple

Créez that.aiml à l'intérieur C > ab > bots > test > aiml et que.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

that.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern>WHAT ABOUT MOVIES</pattern>
      <template>Do you like comedy movies</template>  
   </category>
   
   <category>
      <pattern>YES</pattern>
      <that>Do you like comedy movies</that>
      <template>Nice, I like comedy movies too.</template>
   </category>
   
   <category>
      <pattern>NO</pattern>
      <that>Do you like comedy movies</that>
      <template>Ok! But I like comedy movies.</template>
   </category> 
   
</aiml>

that.aiml.csv

0,WHAT ABOUT MOVIES,*,*,Do you like comedy movies,that.aiml
0,YES,Do you like comedy movies,*,Nice! I like comedy movies too.,that.aiml
0,NO,Do you like comedy movies,*,Ok! But I like comedy movies.,that.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: What about movies?
Robot: Do you like comedy movies?
Human: No
Robot: Ok! But I like comedy movies.

<topic>La balise est utilisée dans AIML pour stocker un contexte afin qu'une conversation ultérieure puisse être effectuée en fonction de ce contexte. Habituellement,<topic> la balise est utilisée dans Yes/No type conversation. Il aide AIML à rechercher des catégories écrites dans le contexte du sujet.

Syntaxe

Définir un sujet à l'aide de la balise <set>

<template> 
   <set name = "topic"> topic-name </set>
</template>

Définissez la catégorie à l'aide de la balise <topic>

<topic name = "topic-name">
   <category>
      ...
   </category>     
</topic>

Par exemple, considérez la conversation suivante.

Human: let discuss movies
Robot: Yes movies
Human: Comedy movies are nice to watch
Robot: Watching good movie refreshes our minds.
Human: I like watching comedy
Robot: I too like watching comedy.

Ici, le robot répond en prenant "film" comme sujet.

Exemple

Créer topic.aiml à l'intérieur C > ab > bots > test > aiml et topic.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

topic.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern>LET DISCUSS MOVIES</pattern>
      <template>Yes <set name = "topic">movies</set></template>  
   </category>
   
   <topic name = "movies">
      <category>
         <pattern> * </pattern>
         <template>Watching good movie refreshes our minds.</template>
      </category>
      
      <category>
         <pattern> I LIKE WATCHING COMEDY! </pattern>
         <template>I like comedy movies too.</template>
      </category>
      
   </topic>
</aiml>

that.aiml.csv

0,LET DISCUSS MOVIES,*,*,Yes <set name = "topic">movies</set>,topic.aiml
0,*,*,movies,Watching good movie refreshes our minds.,topic.aiml
0,I LIKE WATCHING COMEDY!,*,movies,I like comedy movies too.,topic.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: let discuss movies
Robot: Yes movies
Human: Comedy movies are nice to watch
Robot: Watching good movie refreshes our minds.
Human: I like watching comedy
Robot: I too like watching comedy.

<think> La balise est utilisée dans AIML pour stocker une variable sans avertir l'utilisateur.

Syntaxe

Stocker une valeur à l'aide de la balise <think>

<think> 
   <set name = "variable-name"> variable-value </set>
</think>

Par exemple, considérez la conversation suivante.

Human: My name is Mahesh
Robot: Hello!
Human: Byeee
Robot: Hi Mahesh Thanks for the conversation!

Exemple

Créez think.aiml à l'intérieur C > ab > bots > test > aiml et think.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

think.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern>My name is *</pattern>
      <template>
         Hello!<think><set name = "username"> <star/></set></think>
      </template>  
   </category>  
   
   <category>
      <pattern>Byeee</pattern>
      <template>
         Hi <get name = "username"/> Thanks for the conversation!
      </template>  
   </category>  
   
</aiml>

think.aiml.csv

0,My name is *,*,*, Hello! <think><set name = "username"> <star/></set></think>,think.aiml
0,Byeee,*,*, Hi <get name = "username"/> Thanks for the conversation!,think.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: My name is Mahesh
Robot: Hello!
Human: Byeee
Robot: Hi Mahesh Thanks for the conversation!

<condition>La balise est similaire aux instructions switch dans le langage de programmation. Cela aide ALICE à répondre à l'entrée correspondante.

Syntaxe

<condition name = "variable-name" value = "variable-value"/>

Par exemple, considérez la conversation suivante.

Human: How are you feeling today
Robot: I am happy!

Ici nous avons stocké happy comme l'état d'ALICE et c'est ainsi qu'il répond comme "je suis heureux!".

Exemple

Créer condition.aiml à l'intérieur C > ab > bots > test > aiml et condition.aiml.csv à l'intérieur C > ab > bots > test > aimlif répertoires.

condition.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> HOW ARE YOU FEELING TODAY </pattern>
      
      <template>
         <think><set name = "state"> happy</set></think>
         <condition name = "state" value = "happy">
            I am happy!
         </condition>
         
         <condition name = "state" value = "sad">
            I am sad!
         </condition>
      </template>
      
   </category>
</aiml>

condition.aiml.csv

0,HOW ARE YOU FEELING TODAY,*,*,
   <think>
      <set name = "state"> happy</set>
   </think>
   
   <condition name = "state" value = "happy">I am happy!</condition>
   <condition name = "state" value = "sad">I am sad!</condition>,condition.aiml

Exécuter le programme

Ouvrez l'invite de commande. Aller àC > ab > et tapez la commande suivante -

java -cp lib/Ab.jar Main bot = test action = chat trace = false

Vérifiez le résultat

Vous verrez la sortie suivante -

Human: How are you feeling today
Robot: I am happy!