Aiml-quick-guide

提供:Dev Guides
移動先:案内検索

AIML-はじめに

AIMLは Artificial Intelligence Markup Language の略です。 AIMLは、AlicebotフリーソフトウェアコミュニティとDr. リチャード・S 1995年から2000年の間のウォレス。 AIMLは、A.L.I.C.Eに基づくチャットボックスアプリケーションであるAlicebotを作成またはカスタマイズするために使用されます。 (人工言語インターネットコンピュータエンティティ)フリーソフトウェア。

AIMLタグ

AIMLドキュメントで一般的に使用される重要なタグは次のとおりです。

S.No. AIML Tag/Description
1

<aiml>

AIMLドキュメントの開始と終了を定義します。

2

<category>

Alicebotのナレッジベースの*ナレッジユニット*を定義します。

3

<pattern>

ユーザーがAlicebotに入力できるものと一致するパターンを定義します。

4

<template>

ユーザーの入力に対するAlicebotの応答を定義します。

これらの各タグについては、link:/aiml/aiml_basic_tags [AIML Basic tags]の章で説明します。

以下は、広く使用されている他のaimlタグの一部です。 次の章で各タグについて詳しく説明します。

S.No. AIML Tag/Description
1

<star>

<pattern>タグのワイルドカード***文字に一致させるために使用されます。

2

<srai>

他のカテゴリの呼び出し/照合に使用される多目的タグ。

3

<random>

ランダムな応答を得るために <random> を使用しました。

4

<li>

複数の応答を表すために使用されます。

5

<set>

AIML変数に値を設定するために使用されます。

6

<get>

AIML変数に格納されている値を取得するために使用されます。

7

<that>

コンテキストに基づいて応答するためにAIMLで使用されます。

8

<topic>

AIMLでコンテキストを保存して、そのコンテキストに基づいて後の会話を行えるようにします。

9

<think>

AIMLで使用され、ユーザーに通知せずに変数を保存します。

10

<condition>

プログラミング言語のswitchステートメントに似ています。 ALICEが一致する入力に応答するのに役立ちます。

AIML語彙

AIMLボキャブラリーでは、単語、スペース、2つの特殊文字'および *' をワイルドカードとして使用します。 AIMLインタープリターは、を持つパターンよりも *' を持つパターンを優先します。 AIMLタグはXMLに準拠しており、パターンは大文字と小文字を区別しません。

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

      <template>
         Hello User!
      </template>

   </category>
</aiml>

以下は考慮すべき重要な点です-

  • <aiml> タグは、AIMLドキュメントの開始を示します。
  • <category> タグはナレッジユニットを定義します。
  • <pattern> タグは、ユーザーが入力するパターンを定義します。
  • <template> タグは、ユーザーがHello Aliceと入力した場合のユーザーへの応答を定義します。

結果

User: Hello Alice
Bot: Hello User

AIML-環境設定

このチュートリアルでは、AIMLで作業を開始して自動チャットソフトウェアを作成する開発環境を準備する方法について説明します。 プログラムABは、ALICE A.Iによって開発および保守されているAIML 2.0のリファレンス実装です。 基礎。 このチュートリアルでは、プログラムABライブラリをセットアップする前に、JDKをセットアップする方法も説明します-

ステップ1-Java Development Kit(JDK)をセットアップする

最新バージョンのSDKは、OracleのJavaサイト-https://www.oracle.com/technetwork/java/javase/downloads/indexl[Java SE Downloads]からダウンロードできます。 ダウンロードしたファイルにJDKをインストールする手順があります。指定された手順に従ってセットアップをインストールおよび構成します。 最後に、PATHおよびJAVA_HOME環境変数を設定して、javaおよびjavacを含むディレクトリ(通常はそれぞれjava_install_dir/binおよびjava_install_dir)を参照します。

Windowsを実行しており、JDKをC:\ jdk1.7.0_75にインストールしている場合、C:\ autoexec.batファイルに次の行を追加する必要があります。

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

または、Windows NT/2000/XPでは、マイコンピュータを右クリックして、[プロパティ]、[詳細設定]、[環境変数]の順に選択することもできます。 次に、PATH値を更新し、[OK]ボタンを押します。

Unix(Solaris、Linuxなど)では、SDKが/usr/local/jdk1.7.0_75にインストールされており、Cシェルを使用する場合、次を.cshrcファイルに追加します。

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

または、Borland JBuilder、Eclipse、IntelliJ IDEA、Sun ONE Studioなどの統合開発環境(IDE)を使用する場合は、単純なプログラムをコンパイルおよび実行して、IDEがJavaをインストールした場所を認識していることを確認します。 IDEの。

ステップ2-プログラムABのセットアップ

これで問題がなければ、プログラムABのセットアップに進むことができます。 以下は、ライブラリをマシンにダウンロードしてインストールする簡単な手順です。

  • AIMLをWindowsにインストールするかUnixにインストールするかを選択してから、次のステップに進んで.zipファイルをダウンロードします
  • [[1]] ABバイナリの最新バージョンをダウンロードします。 -ab-0.0.4.3.zip&can = 1&q = [program-ab-0.0.4.3.zip]リンク。
  • このチュートリアルを書いている時点で、Windowsマシンに program-ab-0.0.4.3.zip をダウンロードしました。ダウンロードしたファイルを解凍すると、C:\ ab内のディレクトリ構造が次のようになります。
S.No. Directory & Description
1

c:/ab/bots

AIMLボットを格納します

2

c:/ab/lib

Javaライブラリーを保管します

3

c:/ab/out

Javaクラスファイルディレクトリ

4

c:/ab/run.bat

プログラムABを実行するためのバッチファイル

この最後の手順が完了したら、次の章で説明する最初のAIMLの例に進む準備ができています。

AIML-最初のアプリケーション

ユーザーが Hello Alice と入力すると、* Hello User!*でユーザーに挨拶するだけの最初のボットの作成を始めましょう。

プロジェクト構造を作成する

link:/aiml/aiml_environment [AIML Environment Setup]の場合と同様に、program-abのコンテンツを C> ab に次のディレクトリ構造で抽出しました。

S.No. Directory & Description
1

c:/ab/bots

AIMLボットを格納します

2

c:/ab/lib

Javaライブラリーを保管します

3

c:/ab/out

Javaクラスファイルディレクトリ

4

c:/ab/run.bat

プログラムABを実行するためのバッチファイル

ここで、 C> ab> bots 内にディレクトリテストを作成し、その中に次のディレクトリを作成します。

S.No. Directory & Description
1

c:/ab/bots/test/aiml

AIMLファイルを保存します

2

c:/ab/bots/test/aimlif

AIMLIFファイルを保存します

3

c:/ab/bots/test/config

構成ファイルを保存します

4

c:/ab/bots/test/sets

AIMLセットを保存します

5

c:/ab/bots/test/maps

AIMLマップを格納します

ソースファイルを作成する

*C> ab>ボット>テスト> aiml* およびtest.aiml.csv内にtest.aimlを *C> ab>ボット> test> aimlif* ディレクトリ内に作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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:
*Hello Alice* と入力して結果を確認し、他の何かを入力して変更された結果を確認します。
Human: hello alice
Robot: Hello User
Human: bye
Robot: I have no answer for that.
Human:

AIML-基本タグ

このチュートリアルでは、AIMLの基本的なタグについて説明します。

  • <aiml> -AIMLドキュメントの始まりと終わりを定義します。
  • <category> -Alicebotのナレッジベースで*ナレッジユニット*を定義します。
  • <パターン> -ユーザーがAlicebotに入力するものと一致するパターンを定義します。
  • <template> -ユーザーの入力に対するAlicebotの応答を定義します。

ここでは、以下の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>

<aiml>タグ

<aiml>タグは、AIMLドキュメントの開始と終了を示します。 バージョンおよびエンコーディング属性の下に、バージョンおよびエンコーディング情報が含まれています。 version属性には、ALICE chatterbot Knowledge Base、KBで使用されるAIMLバージョンが格納されます。 たとえば、1.0.1バージョンを使用しました。 この属性はオプションです。

エンコード属性は、ドキュメントで使用される文字セットを提供します。 たとえば、UTF-8を使用しました。 必須要件として、<aiml>タグには少なくとも1つの<category>タグが含まれている必要があります。 各AIMLファイルに単一の<aiml>タグが含まれる複数のAIMLファイルを作成できます。 各AIMLファイルの目的は、categoryと呼ばれる少なくとも1つのナレッジユニットをALICE chatterbot KBに追加することです。

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

<category>タグ

<category>タグは、ALICE Botの基本的な知識単位です。 各カテゴリに含まれるもの-

  • アサーション、質問、感嘆符などになりうる文の形式でのユーザー入力。 ユーザー入力には、**や *_ などのワイルドカード文字を含めることができます。

  • Alicebotによって提示されるユーザー入力への応答。

  • オプションのコンテキスト。

    *<category>* タグには、 *<pattern>* および *<template>* タグが必要です。 *<パターン>* はユーザー入力を表し、テンプレートはボットの応答を表します。
<category>
   <pattern> HELLO ALICE </pattern>

   <template>
      Hello User
   </template>

</category>

ここで、ユーザーが Hello Alice と入力すると、ボットは Hello User として応答します。

<pattern>タグ

<pattern>タグは、ユーザーの入力を表します。 <category>タグ内の最初のタグである必要があります。 <pattern>タグには、ユーザー入力として複数の文に一致するワイルドカードを含めることができます。 たとえば、この例では、<pattern>にHELLO ALICEが含まれています。

AIMLは大文字と小文字を区別しません。 ユーザーがHello Alice、hello alice、HELLO ALICEなどを入力すると、すべての入力が有効になり、ボットはそれらをHELLO ALICEと照合します。

<category>
   <pattern> HELLO ALICE </pattern>

   <template>
      Hello User
   </template>

</category>

ここでは、テンプレートは「Hello User」であり、ユーザー入力に対するロボットの応答を表しています。

<template>タグ

<template>タグは、ユーザーに対するボットの応答を表します。 <category>タグ内の2番目のタグである必要があります。 この<template>タグは、データの保存、別のプログラムの呼び出し、条件付き回答の提供、または他のカテゴリへの委任を行うことができます。

<category>
   <pattern> HELLO ALICE </pattern>

   <template>
      Hello User
   </template>

</category>

ここでは、テンプレートは「Hello User」であり、ユーザー入力に対するロボットの応答を表しています。

AIML-<star>タグ

*<star>* タグは、<pattern>タグ内のワイルドカード***文字に一致させるために使用されます。

構文

<star index = "n"/>
*n* は、<pattern>タグのユーザー入力内の*の位置を示します。

次の例を考慮してください-

<category>
   <pattern> A *is a* . </pattern>

   <template>
      When a <star index = "1"/> is not a <star index = "2"/>?
   </template>

</category>

ユーザーが「マンゴーは果物です」と入力した場合。ボットは「マンゴーが果物ではないとき」と応答します。

*C> ab>ボット>テスト> aiml* 内にstar.aimlを作成し、 *C> ab>ボット> test> aimlif* ディレクトリ内にstar.aiml.csvを作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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"/>は、多くの場合<star/>として使用されます

AIML-<srai>タグ

*<srai>* タグは多目的タグです。 このタグにより、AIMLは同じテンプレートの異なるターゲットを定義できます。

構文

<srai&gt pattern </srai&gt

以下は、 srai に関連する一般的に使用される用語です-

  • シンボリックリダクション
  • 分割統治
  • 同義語の解決
  • キーワード検出

シンボリックリダクション

シンボリックリダクション手法は、パターンを単純化するために使用されます。 単純なパターンで複雑な文法パターンを減らすのに役立ちます。

たとえば、次の会話を考えます。

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.

さて、 what if の質問は

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

ここでは、 <srai&gt タグが機能します。 ユーザーのパターンをテンプレートとして使用できます。

ステップ1:カテゴリーを作成する

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

ステップ2:<srai&gtタグを使用して汎用カテゴリを作成する

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

   <template>
      <srai>WHO IS <star/></srai>
   </template>

</category>

*C> ab>ボット>テスト> aiml* 内にsrai.aimlを作成し、 *C> ab>ボット>テスト> aimlif* ディレクトリ内にsrai.aiml.csvを作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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

分割統治

分割統治は、完全な返信を行う際にサブセンテンスを再利用するために使用されます。 複数のカテゴリの定義を減らすのに役立ちます。

たとえば、次の会話を検討してください。

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

ここで、ロボットは* GoodBye!を返信することが期待されています。ユーザーが文の先頭で *Bye と言ったときはいつでも。

ここで<srai&gtタグを機能させましょう。

ステップ1:カテゴリーを作成する

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

ステップ2:<srai&gtタグを使用して汎用カテゴリを作成する

<category>
   <pattern>BYE *</pattern>

   <template>
      <srai>BYE</srai>
   </template>

</category>

*C> ab> bots> test> aiml* およびsrai.aiml.csv内のsrai.aimlを *C> ab> bots> test> aimlif* ディレクトリ内で更新します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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

同義語の解決

同義語は、同様の意味を持つ単語です。 ボットは、同様の単語に対して同じ方法で返信する必要があります。

たとえば、次の会話を考えます。

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

ここで、ユーザーが Factory または Industry と言ったときはいつでも、ロボットは* Development Center!*と返信することが期待されています。

ここで動作するように <srai> タグを配置しましょう。

ステップ1:カテゴリーを作成する

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

ステップ2:<srai>タグを使用して汎用カテゴリを作成する

<category>
   <pattern>INDUSTRY</pattern>

   <template>
      <srai>FACTORY</srai>
   </template>

</category>

*C> ab> bots> test> aiml* およびsrai.aiml.csv内のsrai.aimlを *C> ab> bots> test> aimlif* ディレクトリ内で更新します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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

キーワード検出

*srai* を使用すると、ユーザーが特定のキーワード(「学校」など)を入力したときに、文中の「学校」がどこにあっても、簡単な応答を返すことができます。

たとえば、次の会話を考えます。

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.

ここで、ロボットは標準メッセージ*「学校は子供の生活の中で重要な機関です。」*に返信することが期待されます。*ユーザーが文に*学校*を持っているときはいつでも。

ここで動作するように <srai> タグを配置しましょう。 ここではワイルドカードを使用します。

ステップ1:カテゴリーを作成する

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

ステップ2:<srai&gtタグを使用して一般的なカテゴリを作成する

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

*C> ab> bots> test> aiml* およびsrai.aiml.csv内のsrai.aimlを *C> ab> bots> test> aimlif* ディレクトリ内で更新します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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.

AIML-<ランダム>タグ

*<ランダム>* タグは、ランダムな応答を取得するために使用されます。 このタグにより、AIMLは同じ入力に対して異なる応答をすることができます。 <random>タグは、<li>タグとともに使用されます。 <li>タグには、ユーザーにランダムに配信されるさまざまな応答が含まれます。

構文

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

たとえば、次の会話を考えます。

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

*C> ab>ボット>テスト> aiml* 内にrandom.aimlを作成し、 *C> ab>ボット>テスト> aimlif* ディレクトリ内にrandom.aiml.csvを作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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

ここで、応答はランダムな応答を考慮して変化する場合があります。

AIML-<set>、<get>タグ

*<set>* および *<get>* タグは、AIMLの変数を操作するために使用されます。 変数は、事前定義された変数またはプログラマーが作成した変数です。

構文

<set>タグは、変数に値を設定するために使用されます。

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

<get>タグは、変数から値を取得するために使用されます。

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

たとえば、次の会話を考えます。

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

*C> ab>ボット>テスト> aiml* 内にsetget.aimlを作成し、 *C> ab>ボット>テスト> aimlif* ディレクトリ内にsetget.aiml.csvを作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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

AIML-<that>タグ

*<that>* タグはAIMLで使用され、コンテキストに基づいて応答します。

構文

<that> template </that>

たとえば、次の会話を考えます。

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

that.aimlを C> ab> bots> test> aiml 内に作成し、that.aiml.csvを C> ab> bots> test> aimlif ディレクトリ内に作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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

AIML-<topic>タグ

*<topic>* タグはAIMLでコンテキストを保存するために使用され、そのコンテキストに基づいて後の会話を行うことができます。 通常、 *<topic>* タグは* Yes/Noタイプの会話*で使用されます。 AIMLは、トピックのコンテキスト内で記述されたカテゴリを検索するのに役立ちます。

構文

<set>タグを使用してトピックを定義する

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

<topic>タグを使用してカテゴリを定義します

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

たとえば、次の会話を考えます。

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.

ここで、ボットは「映画」をトピックとして応答します。

*C> ab>ボット>テスト> aiml* およびtopic.aiml.csv内にtopic.aimlを *C> ab>ボット> test> aimlif* ディレクトリ内に作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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.

AIML-<think>タグ

*<think>* タグはAIMLで使用され、ユーザーに通知せずに変数を保存します。

構文

<think>タグを使用して値を保存する

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

たとえば、次の会話を考えます。

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

*C> ab>ボット>テスト> aiml* 内にthink.aimlを作成し、 *C> ab>ボット>テスト> aimlif* ディレクトリ内にthink.aiml.csvを作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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

AIML-<条件>タグ

*<condition>* タグは、プログラミング言語のswitchステートメントに似ています。 ALICEが一致する入力に応答するのに役立ちます。

構文

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

たとえば、次の会話を考えます。

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

ここでは、 happy をALICEの状態として保存しており、それが「I am happy!」として応答する方法です。

*C> ab>ボット>テスト> aiml* 内にcondition.aimlを作成し、 *C> ab>ボット> test> aimlif* ディレクトリ内にcondition.aiml.csvを作成します。

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

プログラムを実行する

コマンドプロンプトを開きます。 C> ab> に移動し、次のコマンドを入力します-

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

結果を確認する

次の出力が表示されます-

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