AIML - Guia Rápido

AIML significa Artificial Intelligence Markup Language. O AIML foi desenvolvido pela comunidade de software livre Alicebot e pelo Dr. Richard S. Wallace durante 1995-2000. O AIML é usado para criar ou personalizar o Alicebot, que é um aplicativo de chat baseado no software livre ALICE (Artificial Linguistic Internet Computer Entity).

Tags AIML

A seguir estão as tags importantes que são comumente usadas em documentos AIML.

S.No. Tag / descrição AIML
1

<aiml>

Define o início e o fim de um documento AIML.

2

<category>

Define o unit of knowledge na base de conhecimento da Alicebot.

3

<pattern>

Define o padrão para corresponder ao que um usuário pode inserir em um Alicebot.

4

<template>

Define a resposta de um Alicebot à entrada do usuário.

Discutiremos cada uma dessas tags no capítulo de tags AIML Basic .

A seguir estão algumas das outras tags de aiml amplamente utilizadas. Discutiremos cada tag em detalhes nos próximos capítulos.

S.No. Tag / descrição AIML
1

<star>

Usado para combinar curinga * caractere (s) na tag <padrão>.

2

<srai>

Tag multiuso, usada para chamar / combinar as outras categorias.

3

<random>

Usava <random> para obter respostas aleatórias.

4

<li>

Usado para representar várias respostas.

5

<set>

Usado para definir o valor em uma variável AIML.

6

<get>

Usado para obter o valor armazenado em uma variável AIML.

7

<that>

Usado em AIML para responder com base no contexto.

8

<topic>

Usado em AIML para armazenar um contexto para que uma conversa posterior possa ser feita com base nesse contexto.

9

<think>

Usado em AIML para armazenar uma variável sem notificar o usuário.

10

<condition>

Semelhante às instruções switch em linguagem de programação. Ajuda o ALICE a responder às entradas correspondentes.

Vocabulário AIML

O vocabulário AIML usa palavras, espaço e dois caracteres especiais * e _como curingas. O intérprete AIML dá preferência ao padrão tendo_ do que padrão tendo *. As tags AIML são compatíveis com XML e os padrões não diferenciam maiúsculas de minúsculas.

Exemplo

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

A seguir estão os pontos importantes a serem considerados -

  • <aiml> tag significa o início do documento AIML.

  • <category> tag define a unidade de conhecimento.

  • <pattern> tag define o padrão que o usuário irá digitar.

  • <template> tag define a resposta ao usuário se o usuário digitar Hello Alice.

Resultado

User: Hello Alice
Bot: Hello User

Este tutorial irá guiá-lo sobre como preparar um ambiente de desenvolvimento para iniciar seu trabalho com AIML para criar software de bate-papo automático. O Programa AB é uma implementação de referência do AIML 2.0 desenvolvido e sendo mantido pela Fundação ALICE AI. Este tutorial também ensinará como configurar o JDK, antes de configurar a biblioteca do Programa AB -

Etapa 1 - Configurar o Java Development Kit (JDK)

Você pode baixar a versão mais recente do SDK no site Java da Oracle - Java SE Downloads . Você encontrará instruções para instalar o JDK nos arquivos baixados, siga as instruções fornecidas para instalar e configurar a configuração. Por fim, defina as variáveis ​​de ambiente PATH e JAVA_HOME para se referir ao diretório que contém java e javac, normalmente java_install_dir / bin e java_install_dir respectivamente.

Se você estiver executando o Windows e instalou o JDK em C: \ jdk1.7.0_75, deverá inserir a seguinte linha em seu arquivo C: \ autoexec.bat.

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

Alternativamente, no Windows NT / 2000 / XP, você também pode clicar com o botão direito do mouse em Meu computador, selecionar Propriedades, Avançado e Variáveis ​​de ambiente. Em seguida, você atualizaria o valor de PATH e pressionaria o botão OK.

No Unix (Solaris, Linux, etc.), se o SDK for instalado em /usr/local/jdk1.7.0_75 e você usar o shell C, você deve colocar o seguinte em seu arquivo .cshrc.

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

Alternativamente, se você usar um Ambiente de Desenvolvimento Integrado (IDE) como Borland JBuilder, Eclipse, IntelliJ IDEA ou Sun ONE Studio, compile e execute um programa simples para confirmar que o IDE sabe onde você instalou o Java, caso contrário, faça a configuração adequada conforme o documento fornecido do IDE.

Etapa 2 - Configurar o Programa AB

Agora, se tudo estiver bem, você pode prosseguir com a configuração do seu Programa AB. A seguir estão as etapas simples para baixar e instalar a biblioteca em sua máquina.

  • Escolha se deseja instalar AIML no Windows ou Unix e, em seguida, prossiga para a próxima etapa para baixar o arquivo .zip

  • Baixe a versão mais recente dos binários do Programa AB em https://code.google.com/p/program-ab/usando seu link program-ab-0.0.4.3.zip .

  • No momento de escrever este tutorial, eu baixei program-ab-0.0.4.3.zip na minha máquina Windows e quando você descompactar o arquivo baixado, ele fornecerá a estrutura de diretório dentro de C: \ ab como segue.

S.No. Diretório e descrição
1

c:/ab/bots

Armazena bots AIML

2

c:/ab/lib

Armazena bibliotecas Java

3

c:/ab/out

Diretório de arquivo de classe Java

4

c:/ab/run.bat

arquivo em lote para execução do Programa AB

Depois de concluir esta última etapa, você está pronto para prosseguir com seu primeiro exemplo AIML, que verá no próximo capítulo.

Vamos começar a criar o primeiro bot que simplesmente cumprimentará um usuário com Hello User! quando um usuário digita Hello Alice.

Crie a estrutura do projeto

Como na configuração do ambiente AIML , extraímos o conteúdo do program-ab emC > ab com a seguinte estrutura de diretório.

S.No. Diretório e descrição
1

c:/ab/bots

Armazena bots AIML

2

c:/ab/lib

Armazena bibliotecas Java

3

c:/ab/out

Diretório de arquivo de classe Java

4

c:/ab/run.bat

arquivo em lote para execução do Programa AB

Agora, crie um teste de diretório dentro C > ab > bots e crie os seguintes diretórios nele.

S.No. Diretório e descrição
1

c:/ab/bots/test/aiml

Armazena arquivos AIML

2

c:/ab/bots/test/aimlif

Armazena arquivos AIMLIF

3

c:/ab/bots/test/config

Armazena arquivos de configuração

4

c:/ab/bots/test/sets

Armazena conjuntos AIML

5

c:/ab/bots/test/maps

Armazena mapas AIML

Criar arquivos de origem

Crie test.aiml dentro C > ab > bots > test > aiml e test.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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:

Tipo Hello Alice e veja o resultado e digite qualquer outra coisa para ver o resultado alterado.

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

Neste tutorial, discutiremos as tags básicas do AIML.

  • <aiml> - define o início e o fim de um documento AIML.

  • <category> - define o unit of knowledge na base de conhecimento da Alicebot.

  • <pattern> - define o padrão para corresponder ao que um usuário pode inserir em um Alicebot.

  • <template> - define a resposta de um Alicebot à entrada do usuário.

Os seguintes arquivos AIML foram usados ​​aqui como referência.

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

tag <aiml>

A tag <aiml> marca o início e o fim de um documento AIML. Ele contém informações de versão e codificação em atributos de versão e codificação. O atributo version armazena a versão AIML usada pelo ALICE chatterbot Knowledge Base, KB. Por exemplo, usamos a versão 1.0.1. Este atributo é opcional.

Os atributos de codificação fornecem os conjuntos de caracteres a serem usados ​​no documento. Por exemplo, usamos UTF-8. Como requisito obrigatório, a tag <aiml> deve conter pelo menos uma tag <category>. Podemos criar vários arquivos AIML onde cada arquivo AIML contém uma única tag <aiml>. O objetivo de cada arquivo AIML é adicionar pelo menos uma única unidade de conhecimento chamada categoria ao chatterbot KB do ALICE.

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

tag <category>

<category> tag é a unidade de conhecimento fundamental de um ALICE Bot. Cada categoria contém -

  • A entrada do usuário na forma de uma frase que pode ser uma asserção, pergunta e exclamação, etc. A entrada do usuário pode conter caracteres curinga como * e _.

  • Resposta à entrada do usuário a ser apresentada por Alicebot.

  • Contexto opcional.

UMA <category> tag deve ter <pattern> e <template> tag. <pattern> representa a entrada do usuário e o modelo representa a resposta do bot.

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

Aqui, se o usuário inserir Hello Alice então o bot responderá de volta como Hello User.

tag <pattern>

A tag <pattern> representa a entrada de um usuário. Deve ser a primeira tag dentro da tag <category>. A tag <pattern> pode conter curinga para corresponder a mais de uma frase como entrada do usuário. Por exemplo, em nosso exemplo, <padrão> contém HELLO ALICE.

AIML não diferencia maiúsculas de minúsculas. Se um usuário inserir Hello Alice, hello alice, HELLO ALICE etc., todas as entradas são válidas e o bot irá combiná-las com HELLO ALICE.

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

Aqui, o modelo é "Olá, usuário" e representa a resposta de um robô à entrada do usuário.

tag <template>

A tag <template> representa a resposta do bot ao usuário. Deve ser a segunda tag dentro da tag <category>. Esta tag <template> pode salvar dados, chamar outro programa, dar respostas condicionais ou delegar a outras categorias.

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

Aqui, o modelo é "Olá, usuário" e representa a resposta de um robô à entrada do usuário.

<star> Tag é usada para combinar curinga * personagem (s) na tag <padrão>.

Sintaxe

<star index = "n"/>

n significa a posição de * dentro da entrada do usuário na tag <pattern>.

Considere o seguinte exemplo -

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

Se o usuário inserir "Uma manga é uma fruta." então o bot responderá como "Quando uma manga não é uma fruta?"

Exemplo

Crie star.aiml dentro C > ab > bots > test > aiml e star.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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" /> é frequentemente usado como <star />

<srai>Tag é uma tag multiuso. Esta tag permite que o AIML defina os diferentes alvos para o mesmo modelo.

Sintaxe

<srai> pattern </srai>

A seguir estão os termos comumente usados ​​associados a srai -

  • Redução Simbólica

  • Dividir e conquistar

  • Resolução de sinônimos

  • Detecção de palavras-chave

Redução Simbólica

A técnica de redução simbólica é usada para simplificar padrões. Ajuda a reduzir padrões gramaticais complexos com padrões simples.

Por exemplo, considere a seguinte conversa.

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.

Agora What if questões são levantadas como

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

Aqui, <srai> tag funciona. Ele pode usar o padrão do usuário como um modelo.

Etapa 1: criar categorias

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

Etapa 2: Crie uma categoria genérica usando a tag <srai>

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

Exemplo

Crie srai.aiml dentro C > ab > bots > test > aiml e srai.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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

Dividir e conquistar

Divide and Conquer é usado para reutilizar sub frases ao fazer uma resposta completa. Ajuda a reduzir a definição de várias categorias.

Por exemplo, considere seguir uma conversa.

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

Agora, aqui o robô deve responder GoodBye! Sempre que um usuário diz Bye no início da frase.

Vamos colocar a tag <srai> para funcionar aqui.

Etapa 1: Criar categoria

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

Etapa 2: Crie uma categoria genérica usando a tag <srai>

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

Exemplo

Atualize srai.aiml dentro C > ab > bots > test > aiml e srai.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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

Resolução de sinônimos

Sinônimos são palavras com significados semelhantes. Um bot deve responder da mesma maneira para palavras semelhantes.

Por exemplo, considere a seguinte conversa.

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

Agora, aqui o robô deve responder Development Center! sempre que um usuário diz Factory ou Industry.

Vamos colocar <srai> tag para trabalhar aqui.

Etapa 1: Criar categoria

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

Etapa 2: Crie uma categoria genérica usando a tag <srai>

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

Exemplo

Atualize srai.aiml dentro C > ab > bots > test > aiml e srai.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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

Detecção de palavras-chave

Usando srai, podemos retornar uma resposta simples quando o usuário digita uma palavra-chave específica, por exemplo, Escola, não importa onde "escola" esteja presente na frase.

Por exemplo, considere a seguinte conversa.

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.

Aqui, o robô deve responder a uma mensagem padrão 'School is an important institution in a child's life.' sempre que um usuário tem school na frase.

Vamos colocar <srai>tag para trabalhar aqui. Usaremos curingas aqui.

Etapa 1: Criar categoria

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

Etapa 2: Crie categorias genéricas usando a tag <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>

Exemplo

Atualize srai.aiml dentro C > ab > bots > test > aiml e srai.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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>Tag é usada para obter respostas aleatórias. Essa tag permite que o AIML responda de maneira diferente para a mesma entrada. A tag <random> é usada junto com as tags <li>. <li> as tags contêm respostas diferentes que devem ser entregues ao usuário de forma aleatória.

Sintaxe

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

Por exemplo, considere a seguinte conversa.

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

Exemplo

Crie random.aiml dentro C > ab > bots > test > aiml e random.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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

Aqui, a resposta pode variar considerando as respostas aleatórias.

<set> e <get>tags são usadas para trabalhar com variáveis ​​em AIML. As variáveis ​​podem ser variáveis ​​predefinidas ou variáveis ​​criadas pelo programador.

Sintaxe

A tag <set> é usada para definir o valor em uma variável.

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

A tag <get> é usada para obter o valor de uma variável.

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

Por exemplo, considere a seguinte conversa.

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

Exemplo

Crie setget.aiml dentro C > ab > bots > test > aiml e setget.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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

<that> Tag é usada em AIML para responder com base no contexto.

Sintaxe

<that> template </that>

Por exemplo, considere a seguinte conversa.

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

Exemplo

Crie that.aiml dentro C > ab > bots > test > aiml e that.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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

<topic>A tag é usada em AIML para armazenar um contexto para que uma conversa posterior possa ser feita com base nesse contexto. Geralmente,<topic> tag é usada em Yes/No type conversation. Isso ajuda a AIML a pesquisar categorias escritas dentro do contexto do tópico.

Sintaxe

Defina um tópico usando a tag <set>

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

Defina a categoria usando a tag <topic>

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

Por exemplo, considere a seguinte conversa.

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.

Aqui o bot responde pegando "filme" como o tópico.

Exemplo

Crie topic.aiml dentro C > ab > bots > test > aiml e topic.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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> Tag é usado em AIML para armazenar uma variável sem notificar o usuário.

Sintaxe

Armazene um valor usando a tag <think>

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

Por exemplo, considere a seguinte conversa.

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

Exemplo

Crie think.aiml dentro C > ab > bots > test > aiml e pense.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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

<condition>Tag é semelhante às instruções switch em linguagem de programação. Ajuda ALICE a responder à entrada correspondente.

Sintaxe

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

Por exemplo, considere a seguinte conversa.

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

Aqui nós armazenamos happy como o estado de ALICE e é assim que responde como "Estou feliz!".

Exemplo

Crie condition.aiml dentro C > ab > bots > test > aiml e condition.aiml.csv dentro C > ab > bots > test > aimlif diretórios.

condição.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>

condição.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

Execute o programa

Abra o prompt de comando. Vamos paraC > ab > e digite o seguinte comando -

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

Verifique o resultado

Você verá a seguinte saída -

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