5. pattern要素内の子要素¶
- bot: マッチさせるボットの情報を指定
- iset: マッチさせる単語の集合を指定
- nlu: マッチさせる高度意図解釈結果を指定
- oneormore: 1個以上の任意の単語とマッチするワイルドカード
- priority: ワイルドカードよりも優先してマッチする単語を指定
- regex: マッチさせる正規表現を指定
- set: マッチさせる単語の集合を記述したファイルを指定
- topic: マッチの条件に追加するtopic変数の値を指定
- that: 1つ前のシステムの応答文を指定
- word: マッチさせる単語(文字列)を指定
- zeroormore: 0個以上の任意の単語とマッチするワイルドカード
尚、マッチングは、英数記号は半角文字、カタカナは全角文字の統一コードで行います。
5.1. bot¶
[1.0]
- 属性
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
name | string | Yes | ボットプロパティ名を指定します。 |
propertiesファイルで定義していないプロパティ名をnameで指定した場合、シナリオ不正、または、常にアンマッチになります。
- 使用例
以下の使用例ではボットの名称を返します。(propertiesファイル で ‘name:ボット’ と設定している前提)
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>あなたは<bot name="name" />ですか?</pattern>
<template>私の名前は<bot name="name" />です。</template>
</category>
</aiml>
関連項目: ファイル管理:properties
5.2. iset¶
[1.0]
- 属性
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
words | string | Yes | カンマ区切りでマッチ対象文字列(単語列)を記載します。 |
- 使用例
以下の使用例では、「東京」「神奈川」「千葉」「群馬」「埼玉」「栃木」のいずれかの単語とマッチするiset要素の記述例です。
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>私は<iset words="東京, 神奈川, 千葉, 群馬, 埼玉, 栃木" />に住んでいます。</pattern>
<template>
私も関東に住んでいます。
</template>
</category>
</aiml>
関連項目: set
5.3. nlu¶
[custom]
- 属性
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
intent | string | Yes | マッチさせるインテント名を指定します。大文字・小文字、全角・半角を区別します。 |
scoreGt | string | No | マッチさせる信頼度を指定します。対象インテントの信頼度が指定した値より大きい場合にマッチします。 |
scoreGe | string | No | マッチさせる信頼度を指定します。対象インテントの信頼度が指定した値以上の場合にマッチします。 |
score | string | No | マッチさせる信頼度を指定します。対象インテントの信頼度が指定した値の時にマッチします。 |
scoreLe | string | No | マッチさせる信頼度を指定します。対象インテントの信頼度が指定した値以下の場合にマッチします。 |
scoreLt | string | No | マッチさせる信頼度を指定します。対象インテントの信頼度が指定した値より小さい場合にマッチします。 |
maxLikelihood | string | No | true 、 false を指定します。対象インテントの信頼度が最大尤度かどうかを指定します。 true の場合、対象インテントが最尤時のみマッチします。 false 場合、対象インテントがの信頼度が最尤候補でなくてもマッチします。未指定時は true として処理します。 |
- 使用例
意図解釈モデルで周辺検索のインテント名が ‘aroundsearch’ と設定されている場合の例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>
<nlu intent="aroundsearch" />
</pattern>
<template>
周辺検索を行います。
</template>
</category>
</aiml>
関連項目: NLU
5.4. oneormore¶
[1.0]
oneormore要素 “_”, “*”は、ワイルドカードの1つで、少なくとも1個の任意の単語とマッチします。 このワイルドカードが pattern要素内の記述の最後にある場合は、ユーザの発話文の終端までマッチ処理を行います。 また、このワイルドカードが pattern要素内の記述の他のAIMLパターンマッチング要素の間にある場合は、ワイルドカードの次のパターンマッチング要素のマッチ処理が行われるまでマッチ処理を行います。
set
、iset
、regex
、bot
よりも先にマッチ処理が行われます。ワイルドカード “*”は、これらのAIMLパターンマッチング要素よりも後にマッチ処理が行われます。次の2つの使用例では、「こんにちは」1単語とその後に続く1個以上の単語とのマッチを評価します。
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>こんにちは _</pattern>
<template>
こんにちは
</template>
</category>
</aiml>
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>こんにちは *</pattern>
<template>
ご機嫌いかがですか?
</template>
</category>
</aiml>
関連項目: zeroormore 、 パターンマッチング
5.5. priority¶
[1.0]
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>こんにちは $今日もいい天気ですね</pattern>
<template>
そうですね
</template>
</category>
<category>
<pattern>こんにちは *</pattern>
<template>
こんにちは
</template>
</category>
<category>
<pattern>こんにちは * ありがとう</pattern>
<template>
どういたしまして
</template>
</category>
</aiml>
5.6. regex¶
[custom]
regex要素の使用によりユーザ発話文に対する正規表現によるパターンマッチングができます。(統一コードではなく、大文字・小文字のみ同一視します。) 単語単位の正規表現への対応、文字列に関する正規表現にも対応します。
- 属性
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
pattern | string | No | 正規表現で単語を記述 |
template | string | No | regex.txtファイルで定義した単語単位の正規表現を利用 |
form | string | No | 複数の単語を含めた文字列を対象とした正規表現を記述 |
- 使用例
regex要素の属性は、3つの方法で正規表現を指定します。
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern><regex pattern="こんにち[は|わ]" /></pattern>
<template>
こんにちは
</template>
</category>
</aiml>
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern><regex template="konnichiwa" /></pattern>
<template>
こんにちは
</template>
</category>
</aiml>
表記 | 意味 |
---|---|
‘[…]’ | ‘[…]’内のいずれかの文字にマッチすればOK。 |
‘A|B’ | ‘|’の左右の文字列のいずれかにマッチすればOK。 |
‘(X)’ | 正規表現Xのサブパターン化。XにマッチすればOK。 |
‘()?’ | ‘?’の直前のサブパターンにマッチしてもしなくてもOK。 |
‘(?!X)’ | 最後尾がXにマッチしなければOK。(他の指定との併用は不可) |
次の使用例では、以下の文のいずれにもマッチします。
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>
<regex form="今[はわ]何時(ですか|です)?" />
</pattern>
<template>
<date format="%H時%M分%S秒" />
</template>
</category>
</aiml>
「今は何時」「今は何時ですか」「今は何時です」 「今わ何時」「今わ何時ですか」「今わ何時です」
関連項目: ファイル管理:regex_templates
5.7. set¶
[1.0]
- 属性
パラメータ | タイプ | 必須 | 説明 |
---|---|---|---|
name | string | Yes | setsファイル名から拡張子を除いた文字列。 |
dynamic
が優先されるため無効になります。- 使用例
以下の例では、prefecture.txtに日本の都道府県名が記載されていることを想定しています。
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>私は<set name="prefecture" />に住んでいます。</pattern>
<template>
私は東京に住んでいます。
</template>
</category>
</aiml>
関連項目: iset 、 ファイル管理:sets
5.8. topic¶
[1.0]
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern><!-- pattern description goes here --></pattern>
<template>
<think><set name="topic">FISHING</set></think>
<!-- response sentence goes here-->
</template>
</category>
</aiml>
以下の使用例では、”なぜそれを知っていますか?”というユーザ発話に対して、それより前の対話でtopicの値が”FISHING”か”COOKING”のどちらに設定されているかで、応答文が変ります。
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>なぜそれを知っていますか?</pattern>
<topic>FISHING</topic>
<template>
子供の頃、父が教えてくれました。
</template>
</category>
<category>
<pattern>なぜそれを知っていますか?</pattern>
<topic>COOKING</topic>
<template>
子供の頃、母が教えてくれました。
</template>
</category>
</aiml>
関連項目: that, set(template要素), think
5.9. that¶
[1.0]
- 使用例
以下の使用例では、直前の対話のシステム応答文が「コーヒーに砂糖とミルクを入れますか」か「紅茶にレモンを入れますか」かで、ユーザ発話文の「はい」、「いいえ」にマッチする対話ルールを場合分けして、直前の対話内容に整合するシステム応答文が返されるようにしています。
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>私はコーヒーが好きです</pattern>
<template>コーヒーに砂糖とミルクを入れますか</template>
</category>
<category>
<pattern>私は紅茶が好きです</pattern>
<template>紅茶にレモンを入れますか</template>
</category>
<category>
<pattern>はい</pattern>
<that>コーヒーに砂糖とミルクを入れますか</that>
<template>わかりました</template>
</category>
<category>
<pattern>いいえ</pattern>
<that>コーヒーに砂糖とミルクを入れますか</that>
<template>ブラックですね</template>
</category>
<category>
<pattern>はい</pattern>
<that>紅茶にレモンを入れますか</that>
<template>わかりました</template>
</category>
<category>
<pattern>いいえ</pattern>
<that>紅茶にレモンを入れますか</that>
<template>ストレートティーですね</template>
</category>
</aiml>
関連項目: topic
5.10. word¶
[1.0]
AIMLの最も基本的なパターンマッチング要素です。 word要素は、単語(分かち書きされた各文字列の単位)を表しており、対話エンジン内部で利用する要素でシナリオでの記述はできません。 英単語においては大文字と小文字を区別せずマッチ処理を行います。 また、全角文字・半角文字については、英数字は半角、カナ文字は全角でマッチ処理を行います。
以下の使用例ではHELLO, hello, Hello, HeLlOのどれでもマッチします。
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>HELLO</pattern>
<template>
こんにちは
</template>
</category>
</aiml>
関連項目: priority
5.11. zeroormore¶
[1.0]
zeroormore要素 “^”, “#” は、ワイルドカードの1つで、少なくとも0個の任意の単語とマッチします。 このワイルドカードが pattern要素内の記述の最後にある場合は、ユーザの発話文の終端までマッチ処理を行います。 また、このワイルドカードが pattern要素内の記述の他のAIMLパターンマッチング要素の間にある場合は、ワイルドカードの次のパターンマッチング要素のマッチ処理が行われるまでマッチ処理を行います。
set
、iset
、regex
、bot
よりも先にマッチ処理が行われます。ワイルドカード “#”は、これらのAIMLパターンマッチング要素よりも後にマッチ処理が行われます。ワイルドカードを連続して記述したpattern要素を指定する場合には、oneormore との混合は避けてください。入力文の該当する範囲の単語数により、star要素での対象単語取得時に誤動作が発生する場合があります。
次の使用例では、「こんにちは」のみ、あるいは、「こんにちは」で始まり1つ以上の単語が続く文にマッチします。
詳細は、パターンマッチング を参照してください。
- 使用例
<?xml version="1.0" encoding="UTF-8"?>
<aiml version="2.0">
<category>
<pattern>こんにちは ^</pattern>
<template>
こんにちは
</template>
</category>
<category>
<pattern>こんにちは #</pattern>
<template>
ご機嫌いかがですか?
</template>
</category>
</aiml>