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!