<pattern>
タグは、ユーザの入力に対してマッチングの対象となる言語パターンを記述します。<pattern>
タグに記載された言語パターンは、言語設定に応じて正規化され、表記ゆれを吸収したマッチングが行われます。level
属性によって<pattern>
タグ毎に正規化の度合いを調整することが可能です。また、1つの<category>
ブロックに複数<pattern>
タグを並べて記述できます。
<pattern>
タグに記述している単語(形態素)でマッチングを行います。level
属性の指定が無い場合は、<pattern>
タグの内容はhypernym
レベルに準拠します。その為、以下の例では「ネコ(読み仮名)」、「キャット(類義語)」のようなものでもマッチします。
1 2 3 4 5 6 |
<category> <pattern>猫</pattern> <template> はい。猫です。 </template> </category> |
属性
名称 | 型 | 必須 | デフォルト | 説明 |
---|---|---|---|---|
partial 独自拡張 |
boolean |
– | false |
pattern 文を部分一致を行うか指定します。 |
level 独自拡張 |
exact surface normalization synonym hypernym regex |
– | hypernym |
正規化文の展開レベルを記述します。 |
label 独自拡張 |
string |
– | – | 意図解釈判定結果によるマッチングを行います。label の値には、タスクごとに設定されたコマンドのID。 |
partial
partial="true"
の場合、グラフ作成時点でパターンを拡幅します。すでにワイルドカード(*
or _
) がある側は、拡幅しません。partial
属性の定義なしの場合は、partial="false"
と同じです。パターンマッチングの優先度は”*”よりもpartial="true"
の方が高くなります。
また、<?>は<star>
を利用しての文字列抽出はできません。
<star>
を利用する場合は*
を明示したパターンを明記してください。
1 2 3 4 5 6 7 8 9 10 11 |
<pattern partial="true">いいえ</pattern> <!-- 上記patternは、下記のように拡幅されます。 ただし、star要素による文字列抽出はできません。 <pattern>いいえ</pattern> <pattern><?> いいえ</pattern> <pattern>いいえ <?></pattern> <pattern><?> いいえ <?></pattern> --> |
level
正規化文の展開レベルを記述します。
指定しない場合のデフォルトは、hypernym
となります。
値 | 説明(具体的なマッチング方法は次の表をご覧ください。) |
---|---|
exact |
表層のみ展開 |
surface |
表層、読み&品詞まで展開 |
normalization |
表層、読み&品詞、助詞の除外、述部正規化まで展開 |
synonym |
表層、読み&品詞、助詞の除外、述部正規化、類義語まで展開 |
hypernym |
表層、読み&品詞、助詞の除外、述部正規化、類義語、上位概念まで展開 |
regex |
正規表現マッチ。他のパターンマッチより優先される。正規表現抽出した文字列は、ワイルドカードマッチと同様に利用可能。 ※正規表現は java.util.regex に準拠。 |
展開レベル | 説明 |
---|---|
表層 | pattern 文に記載された内容通りのマッチングを行います。 |
読み&品詞 | pattern 文に記載された内容を形態素解析した結果の読み&品詞でマッチングを行います。 |
助詞の除外 | 文中の助詞を無視してマッチングを行います。 |
述部正規化 | 助動詞などを役割ごとに分類してマッチングを行います。 |
類義語 | pattern 文に記載された内容の内、名詞の類義語を考慮してマッチングを行います。 |
上位概念 | pattern 文に記載された内容の内、名詞の上位概念を考慮してマッチングを行います。 |
正規表現 | pattern 文に記載された正規表現ルールでマッチングを行います |
level=”exact”
level="exact"
は<pattern>
タグの指定内容通りにしかマッチしません。
1 2 3 4 5 6 7 |
<category> <!-- 他のユーザ発話にはマッチしません。 --> <pattern level="exact">今日の天気を知りたい</pattern> <template> LEVEL:exact </template> </category> |
level=”surface”
level="surface"
は単語の読み仮名でもマッチします。
1 2 3 4 5 6 7 |
<category> <!-- ユーザ発話「今日のてんきを知りたい」にもマッチします。 --> <pattern level="surface">今日の天気を知りたい</pattern> <template> LEVEL:surface </template> </category> |
level=”normalization”
level="normalization"
は助詞省略でもマッチします。述部の言い回しが異なっていても同様の意味合いならばマッチします。
1 2 3 4 5 6 7 |
<category> <!-- ユーザ発話「今日の天気を教えてください」等にもマッチします。 --> <pattern level="normalization">今日の天気を教えて</pattern> <template> LEVEL:normalization </template> </category> |
level=”synonym”
level="synonym"
は単語の類義語でもマッチします。この例では「今日」を「今」と置き換えて発話してもマッチします。
1 2 3 4 5 6 7 |
<category> <!-- ユーザ発話「今の天気を教えて」等にもマッチします。 --> <pattern level="synonym">今日の天気を教えて</pattern> <template> LEVEL:synonym </template> </category> |
level=”hypernym”
level="hypernym"
は単語の上位概念でもマッチします。この例では「天気」の上位概念が「天候」であり、それに含まれるであろう「台風」や「吹雪」でマッチします。
level
属性を記述しない場合は、この設定が適用されます。
1 2 3 4 5 6 7 |
<category> <!-- ユーザ発話「去年の吹雪について調べて」等にもマッチします。 --> <pattern level="hypernym">今日の天気を教えて</pattern> <template> LEVEL:hypernym </template> </category> |
level=”regex”
level="regex"
は正規表現ルールに則ったユーザ発話文にマッチします。
1 2 3 4 5 6 7 |
<category> <!-- ユーザ発話に「天」が含まれていればマッチします。 --> <pattern level="regex">^.*天.*$</pattern> <template> LEVEL:regex </template> </category> |
label
意図解釈エンジンを使用する際に記述します。
labelの値には、タスクごとに設定されたコマンドのIDを設定します。
label属性だけの空要素でもマッチングできますが、pattern文も明記するとand条件になります。
下記の例は天気タスクをマッチング条件とした例と、それに加えてユーザ発話に「天気」が含まれる条件の例です。
マッチング条件:タスク(天気検索)
xAIML
1 2 3 4 5 6 |
<category> <pattern label="ST001001002"/> <template> 天気を調べます。 </template> </category> |
実行結果
1 2 3 4 |
user > 今日の天気は? bot > 天気を調べます。 user > 今日は晴れるかな? bot > 天気を調べます。 |
マッチング条件:タスク(天気検索)+ユーザ発話(天気を教えて)
xAIML
1 2 3 4 5 6 |
<category> <pattern label="ST001001002">*天気*</pattern> <template> 天気を調べます。 </template> </category> |
実行結果
1 2 3 4 |
user > 今日の天気は? bot > 天気を調べます。 user > 今日は晴れるかな? bot > NOMATCH |
子要素
名称 | 必須 | 説明 |
---|---|---|
bot |
– | あらかじめ登録してあるボットプロパティの内容でマッチングを行います。 |
eval |
– | <learn> <learnf> の外から引用した値をリテラル化します。<learn> <learnf> 内の<pattern> でのみ使用できます。 |
get |
– | 取得したPredicateの値でマッチングを行います。 |
map |
– | あらかじめ登録した辞書(MAPファイル)の内容でマッチングを行います。 |
set |
– | あらかじめ登録した辞書(SETファイル)の内容でマッチングを行います。 |
bot
あらかじめ登録してあるボットプロパティの内容でマッチングを行います。
詳細はこちらをご覧ください。
eval
<learn>
<learnf>
の外から引用した値をリテラル化します。<learn>
<learnf>
内の<pattern>
でのみ使用できます。
詳細はこちらをご覧ください。
get
取得したPredicateの値でマッチングを行います。
詳細はこちらをご覧ください。
map
あらかじめ登録した辞書(MAPファイル)の内容でマッチングを行います。
詳細はこちらをご覧ください。
set
あらかじめ登録した辞書(SETファイル)の内容でマッチングを行います。
詳細はこちらをご覧ください。