AIML - Szybki przewodnik

AIML oznacza Artificial Intelligence Markup Language. AIML został opracowany przez społeczność wolnego oprogramowania Alicebot i dr Richarda S. Wallace'a w latach 1995-2000. AIML służy do tworzenia lub dostosowywania Alicebota, który jest aplikacją chat-box opartą na bezpłatnym oprogramowaniu ALICE (Artificial Linguistic Internet Computer Entity).

Tagi AIML

Poniżej przedstawiono ważne znaczniki, które są powszechnie używane w dokumentach AIML.

S.No. Znacznik / opis AIML
1

<aiml>

Definiuje początek i koniec dokumentu AIML.

2

<category>

Definiuje unit of knowledge w bazie wiedzy Alicebot.

3

<pattern>

Definiuje wzorzec pasujący do tego, co użytkownik może wprowadzić do Alicebota.

4

<template>

Definiuje odpowiedź Alicebota na dane wejściowe użytkownika.

Omówimy każdy z tych tagów w rozdziale o tagach AIML Basic .

Poniżej znajduje się kilka innych powszechnie używanych tagów AIML. W kolejnych rozdziałach omówimy szczegółowo każdy tag.

S.No. Znacznik / opis AIML
1

<star>

Używane do dopasowania dzikiej karty * znak (i) w tagu <pattern>.

2

<srai>

Znacznik uniwersalny, używany do wywoływania / dopasowywania innych kategorii.

3

<random>

Używany <random> aby uzyskać losowe odpowiedzi.

4

<li>

Używane do reprezentowania wielu odpowiedzi.

5

<set>

Służy do ustawiania wartości w zmiennej AIML.

6

<get>

Służy do pobierania wartości przechowywanej w zmiennej AIML.

7

<that>

Używany w AIML do odpowiadania na podstawie kontekstu.

8

<topic>

Używany w AIML do przechowywania kontekstu, aby później można było prowadzić konwersację w oparciu o ten kontekst.

9

<think>

Używany w AIML do przechowywania zmiennej bez powiadamiania użytkownika.

10

<condition>

Podobnie jak instrukcje przełączania w języku programowania. Pomaga ALICE reagować na pasujące dane wejściowe.

AIML Vocabulary

Słownictwo AIML używa słów, spacji i dwóch znaków specjalnych * i _jako dzikie karty. Interpreter AIML preferuje posiadanie wzorca_ niż posiadanie wzoru *. Tagi AIML są zgodne z XML, a wzorce nie uwzględniają wielkości liter.

Przykład

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

Poniżej przedstawiono ważne punkty, które należy wziąć pod uwagę -

  • <aiml> znacznik oznacza początek dokumentu AIML.

  • <category> tag definiuje jednostkę wiedzy.

  • <pattern> tag określa wzorzec, który będzie wpisywany przez użytkownika.

  • <template> tag definiuje odpowiedź dla użytkownika, jeśli użytkownik wpisze Hello Alice.

Wynik

User: Hello Alice
Bot: Hello User

Ten samouczek poprowadzi Cię, jak przygotować środowisko programistyczne do rozpoczęcia pracy z AIML w celu stworzenia oprogramowania do automatycznego czatu. Program AB jest referencyjną implementacją AIML 2.0 opracowaną i utrzymywaną przez ALICE AI Foundation. Ten samouczek nauczy Cię również, jak skonfigurować JDK, zanim skonfigurujesz bibliotekę Program AB -

Krok 1 - Skonfiguruj zestaw Java Development Kit (JDK)

Najnowszą wersję pakietu SDK można pobrać z witryny Oracle Java - Java SE Downloads . Znajdziesz instrukcje instalacji JDK w pobranych plikach, postępuj zgodnie z podanymi instrukcjami, aby zainstalować i skonfigurować instalację. Na koniec ustaw zmienne środowiskowe PATH i JAVA_HOME, aby odwoływały się do katalogu zawierającego elementy java i javac, zazwyczaj odpowiednio katalog_instalacyjny_java / bin i katalog_instalacyjny_java.

Jeśli używasz systemu Windows i zainstalowałeś pakiet JDK w C: \ jdk1.7.0_75, musisz umieścić następujący wiersz w pliku C: \ autoexec.bat.

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

Alternatywnie, w systemie Windows NT / 2000 / XP można również kliknąć prawym przyciskiem myszy Mój komputer, wybrać Właściwości, następnie Zaawansowane, a następnie Zmienne środowiskowe. Następnie zaktualizuj wartość PATH i naciśnij przycisk OK.

W systemie Unix (Solaris, Linux itp.), Jeśli SDK jest zainstalowany w /usr/local/jdk1.7.0_75 i używasz powłoki C, umieściłbyś następujące elementy w swoim pliku .cshrc.

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

Alternatywnie, jeśli używasz zintegrowanego środowiska programistycznego (IDE), takiego jak Borland JBuilder, Eclipse, IntelliJ IDEA lub Sun ONE Studio, skompiluj i uruchom prosty program, aby potwierdzić, że IDE wie, gdzie zainstalowałeś Javę, w przeciwnym razie wykonaj odpowiednią konfigurację zgodnie z podanym dokumentem IDE.

Krok 2 - Ustaw program AB

Teraz, jeśli wszystko jest w porządku, możesz przystąpić do konfiguracji programu AB. Poniżej przedstawiono proste kroki, aby pobrać i zainstalować bibliotekę na komputerze.

  • Wybierz, czy chcesz zainstalować AIML w systemie Windows, czy Unix, a następnie przejdź do następnego kroku, aby pobrać plik .zip

  • Pobierz najnowszą wersję plików binarnych programu AB z witryny https://code.google.com/p/program-ab/używając linku program-ab-0.0.4.3.zip .

  • W momencie pisania tego samouczka pobrałem program-ab-0.0.4.3.zip na moim komputerze z systemem Windows i po rozpakowaniu pobranego pliku da ci strukturę katalogów wewnątrz C: \ ab w następujący sposób.

S.No. Katalog i opis
1

c:/ab/bots

Przechowuje boty AIML

2

c:/ab/lib

Przechowuje biblioteki Java

3

c:/ab/out

Katalog plików klas Java

4

c:/ab/run.bat

plik wsadowy do uruchamiania programu AB

Kiedy skończysz z tym ostatnim krokiem, możesz przejść do pierwszego przykładu AIML, który zobaczysz w następnym rozdziale.

Zacznijmy tworzyć pierwszego bota, który po prostu przywita użytkownika Hello User! gdy użytkownik pisze Hello Alice.

Utwórz strukturę projektu

Podobnie jak w przypadku konfiguracji środowiska AIML , wyodrębniliśmy zawartość program-ab inC > ab z następującą strukturą katalogów.

S.No. Katalog i opis
1

c:/ab/bots

Przechowuje boty AIML

2

c:/ab/lib

Przechowuje biblioteki Java

3

c:/ab/out

Katalog plików klas Java

4

c:/ab/run.bat

plik wsadowy do uruchamiania programu AB

Teraz utwórz test katalogu w środku C > ab > bots i utwórz w nim następujące katalogi.

S.No. Katalog i opis
1

c:/ab/bots/test/aiml

Przechowuje pliki AIML

2

c:/ab/bots/test/aimlif

Przechowuje pliki AIMLIF

3

c:/ab/bots/test/config

Przechowuje pliki konfiguracyjne

4

c:/ab/bots/test/sets

Przechowuje zestawy AIML

5

c:/ab/bots/test/maps

Przechowuje mapy AIML

Utwórz pliki źródłowe

Utwórz plik test.aiml inside C > ab > bots > test > aiml i test.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujące dane wyjściowe -

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:

Rodzaj Hello Alice i zobacz wynik, a następnie wpisz cokolwiek innego, aby zobaczyć zmieniony wynik.

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

W tym samouczku omówimy podstawowe tagi AIML.

  • <aiml> - określa początek i koniec dokumentu AIML.

  • <category> - definiuje unit of knowledge w bazie wiedzy Alicebot.

  • <pattern> - definiuje wzorzec pasujący do tego, co użytkownik może wprowadzić do Alicebota.

  • <template> - definiuje odpowiedź Alicebota na dane wejściowe użytkownika.

Następujące pliki AIML zostały użyte tutaj jako odniesienie.

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

Znacznik <aiml> oznacza początek i koniec dokumentu AIML. Zawiera informacje o wersji i kodowaniu w atrybutach wersji i kodowania. atrybut wersji przechowuje wersję AIML używaną przez bazę wiedzy ALICE chatterbot, KB. Na przykład używaliśmy wersji 1.0.1. Ten atrybut jest opcjonalny.

Atrybuty kodowania zapewniają zestawy znaków, które mają być używane w dokumencie. Na przykład użyliśmy UTF-8. Tag <aiml> musi zawierać co najmniej jeden tag <category> jako obowiązkowy wymóg. Możemy tworzyć wiele plików AIML, z których każdy zawiera jeden tag <aiml>. Celem każdego pliku AIML jest dodanie co najmniej jednej jednostki wiedzy zwanej kategorią do bazy wiedzy ALICE chatterbot.

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

tag <category>

Tag <category> to podstawowa jednostka wiedzy botów ALICE. Każda kategoria zawiera -

  • Dane wprowadzane przez użytkownika w formie zdania, które może być stwierdzeniem, pytaniem, wykrzyknikiem itp. Wprowadzane przez użytkownika mogą zawierać symbole wieloznaczne, takie jak * i _.

  • Odpowiedź na dane wejściowe użytkownika, które ma przedstawić Alicebot.

  • Kontekst opcjonalny.

ZA <category> tag musi mieć <pattern> i <template> etykietka. <pattern> reprezentuje dane wejściowe użytkownika, a szablon reprezentuje odpowiedź bota.

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

Tutaj, jeśli użytkownik wejdzie Hello Alice wtedy bot odpowie jako Hello User.

tag <pattern>

Znacznik <pattern> reprezentuje dane wejściowe użytkownika. Powinien to być pierwszy tag w tagu <category>. Znacznik <pattern> może zawierać symbole wieloznaczne, aby dopasować więcej niż jedno zdanie jako dane wejściowe użytkownika. Na przykład w naszym przykładzie <wzór> zawiera HELLO ALICE.

AIML nie rozróżnia wielkości liter. Jeśli użytkownik wpisze Hello Alice, hello alice, HELLO ALICE itp., Wszystkie dane wejściowe są prawidłowe i bot dopasuje je do HELLO ALICE.

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

Tutaj szablon to „Hello User” i reprezentuje odpowiedź robota na dane wejściowe użytkownika.

tag <template>

Tag <template> reprezentuje odpowiedź bota na użytkownika. Powinien to być drugi tag w tagu <category>. Ten tag <template> może zapisywać dane, wywoływać inny program, udzielać warunkowych odpowiedzi lub delegować do innych kategorii.

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

Tutaj szablon to „Hello User” i przedstawia odpowiedź robota na dane wejściowe użytkownika.

<star> Tag służy do dopasowywania symboli wieloznacznych * znak (i) w tagu <pattern>.

Składnia

<star index = "n"/>

n oznacza pozycję * w tagu <pattern> wprowadzanym przez użytkownika.

Rozważmy następujący przykład -

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

Jeśli użytkownik wpisze „Mango to owoc”. wtedy bot odpowie „Kiedy mango nie jest owocem?”

Przykład

Utwórz star.aiml inside C > ab > bots > test > aiml i star.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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" /> jest często używane jako <star />

<srai>Tag to tag uniwersalny. Ten tag umożliwia AIML definiowanie różnych celów dla tego samego szablonu.

Składnia

<srai> pattern </srai>

Poniżej znajdują się powszechnie używane terminy związane z srai -

  • Symboliczna redukcja

  • Dziel i rządź

  • Rozdzielczość synonimów

  • Wykrywanie słów kluczowych

Symboliczna redukcja

Technika redukcji symbolicznej służy do uproszczenia wzorów. Pomaga zredukować złożone wzorce gramatyczne dzięki prostym wzorom (wzorom).

Weźmy na przykład pod uwagę następującą rozmowę.

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.

Teraz What if pytania są podnoszone jako

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

Tutaj, <srai> tag działa. Może przyjąć wzorzec użytkownika jako szablon.

Krok 1: Utwórz kategorie

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

Krok 2: Utwórz kategorię ogólną za pomocą tagu <srai>

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

Przykład

Utwórz srai.aiml inside C > ab > bots > test > aiml i srai.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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

Dziel i rządź

Dziel i rządź służy do ponownego wykorzystania podrzędnych zdań w celu uzyskania pełnej odpowiedzi. Pomaga ograniczyć definiowanie wielu kategorii.

Na przykład rozważ śledzenie rozmowy.

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

Teraz oczekuje się, że robot odpowie GoodBye! Zawsze, gdy mówi użytkownik Bye na początku zdania.

Umieśćmy tutaj tag <srai>.

Krok 1: Utwórz kategorię

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

Krok 2: Utwórz kategorię ogólną za pomocą tagu <srai>

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

Przykład

Zaktualizuj srai.aiml inside C > ab > bots > test > aiml i srai.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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

Rozdzielczość synonimów

Synonimy to słowa o podobnym znaczeniu. Bot powinien odpowiadać w ten sam sposób na podobne słowa.

Weźmy na przykład pod uwagę następującą rozmowę.

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

Teraz oczekuje się, że robot odpowie Development Center! za każdym razem, gdy mówi użytkownik Factory lub Industry.

Włóżmy <srai> tag do pracy tutaj.

Krok 1: Utwórz kategorię

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

Krok 2: Utwórz kategorię ogólną za pomocą tagu <srai>

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

Przykład

Zaktualizuj srai.aiml inside C > ab > bots > test > aiml i srai.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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

Wykrywanie słów kluczowych

Za pomocą srai, możemy zwrócić prostą odpowiedź, gdy użytkownik wpisze określone słowo kluczowe, na przykład Szkoła, bez względu na to, gdzie w zdaniu występuje słowo „szkoła”.

Weźmy na przykład pod uwagę następującą rozmowę.

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.

Tutaj oczekuje się, że robot odpowie na standardową wiadomość 'School is an important institution in a child's life.' zawsze, gdy użytkownik ma school w zdaniu.

Włóżmy <srai>tag do pracy tutaj. Użyjemy tutaj symboli wieloznacznych.

Krok 1: Utwórz kategorię

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

Krok 2: Utwórz kategorie ogólne za pomocą tagu <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>

Przykład

Zaktualizuj srai.aiml inside C > ab > bots > test > aiml i srai.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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 służy do uzyskiwania losowych odpowiedzi. Ten tag umożliwia AIML różną odpowiedź na to samo wejście. Znacznik <random> jest używany razem z tagami <li>. Tagi <li> zawierają różne odpowiedzi, które mają być dostarczane użytkownikowi w sposób losowy.

Składnia

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

Weźmy na przykład pod uwagę następującą rozmowę.

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

Przykład

Utwórz random.aiml inside C > ab > bots > test > aiml i random.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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

Tutaj odpowiedź może się różnić, biorąc pod uwagę losowe odpowiedzi.

<set> i <get>Tagi są używane do pracy ze zmiennymi w AIML. Zmienne mogą być predefiniowanymi zmiennymi lub zmiennymi utworzonymi przez programistę.

Składnia

Tag <set> służy do ustawiania wartości w zmiennej.

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

Tag <get> służy do pobierania wartości ze zmiennej.

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

Weźmy na przykład pod uwagę następującą rozmowę.

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

Przykład

Utwórz plik setget.aiml inside C > ab > bots > test > aiml i setget.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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

<that> Tag jest używany w AIML do odpowiadania na podstawie kontekstu.

Składnia

<that> template </that>

Weźmy na przykład pod uwagę następującą rozmowę.

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

Przykład

Stwórz to. Cel w środku C > ab > bots > test > aiml i that.aiml.csv w środku C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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

<topic>Tag jest używany w AIML do przechowywania kontekstu, aby później można było prowadzić konwersację w oparciu o ten kontekst. Zwykle,<topic> tag jest używany w Yes/No type conversation. Pomaga AIML w wyszukiwaniu kategorii napisanych w kontekście tematu.

Składnia

Zdefiniuj temat za pomocą tagu <set>

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

Zdefiniuj kategorię za pomocą tagu <topic>

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

Weźmy na przykład pod uwagę następującą rozmowę.

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.

Tutaj bot odpowiada, biorąc za temat „film”.

Przykład

Utwórz plik topic.aiml wewnątrz C > ab > bots > test > aiml i topic.aiml.csv wewnątrz C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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 jest używany w AIML do przechowywania zmiennej bez powiadamiania użytkownika.

Składnia

Zapisz wartość za pomocą tagu <think>

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

Weźmy na przykład pod uwagę następującą rozmowę.

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

Przykład

Stwórz think.aiml inside C > ab > bots > test > aiml i think.aiml.csv w środku C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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

<condition>Tag jest podobny do instrukcji przełączania w języku programowania. Pomaga ALICE odpowiedzieć na pasujące dane wejściowe.

Składnia

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

Weźmy na przykład pod uwagę następującą rozmowę.

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

Tutaj mamy przechowywane happy jako stan ALICE i tak reaguje jako „Jestem szczęśliwy!”.

Przykład

Utwórz condition.aiml inside C > ab > bots > test > aiml i wewnątrz condition.aiml.csv C > ab > bots > test > aimlif katalogi.

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

Wykonaj program

Otwórz wiersz polecenia. Iść doC > ab > i wpisz następujące polecenie -

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

Sprawdź wynik

Zobaczysz następujący wynik -

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