

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 文法スロットタイプ
<a name="building-srgs"></a>

文法スロットタイプを使用すると、SRGS 仕様に従って XML 形式で独自の文法を作成して、会話の中で情報を収集できます。Amazon Lex V2 は、文法で指定されたルールに一致する発話を認識します。文法ファイル内の ECMAScript タグを使用してセマンティック解釈ルールを指定することもできます。Amazon Lex は、一致が発生すると、タグに設定されたプロパティを解決済みの値として返します。

文法スロットタイプは、英語 (オーストラリア)、英語 (英国)、および英語 (米国) のロケールでのみ作成できます。

文法スロットタイプには 2 つの部分があります。1 つ目は、SRGS 仕様フォーマットを使用して記述された文法自体です。文法はユーザーからの発話を解釈します。発話が文法に受け入れられた場合は一致し、そうでない場合は拒否されます。発話が一致すると、スクリプトに渡されます (ある場合)。

もう 1 つは文法スロットタイプの一部です。これは ECMAScript で記述されたオプションのスクリプトで、入力をスロットタイプによって返される解決済みの値に変換します。たとえば、スクリプトを使用して音声番号を数字に変換できます。ECMAScript ステートメントは <tag> 要素で囲まれています。

以下の例は、Amazon Lex V2 で受け入れられている有効な文法を示す、SRGS 仕様に従った XML 形式です。カード番号を受け付ける文法スロットタイプを定義し、カード番号が通常アカウント用かプレミアムアカウント用かを判断します。許容される構文の詳細については、「[文法の定義](grammar-srgs-spec.md)」 および「[文字起こし形式](grammar-ecmascript-spec.md)」 トピックを参照してください。

```
<grammar version="1.0" xmlns="http://www.w3.org/2001/06/grammar"
         xml:lang="en-US" tag-format="semantics/1.0" root="card_number">

   <rule id="card_number" scope="public">
        <item repeat="0-1">
            card number
        </item>
        <item>
            seven
            <tag>out.value = "7";</tag>
         </item>
         <item>
            <one-of>
               <item>
                  two four one
                  <tag> out.value = out.value + "241"; out.card_type = "premium"; </tag>
               </item>
               <item>
                  zero zero one
                  <tag> out.value = out.value + "001"; out.card_type = "regular";</tag>
               </item>
            </one-of>
         </item>
   </rule>
</grammar>
```

上記の文法では、7241 と 7001 の 2 種類のカード番号しか使用できません。どちらの場合も、オプションで「カード番号」のプレフィックスを付けることができます。また、セマンティックな解釈に使用できる ECMAScript タグも含まれています。セマンティックな解釈では、「カード番号 7 2 4 1」という発話は次のオブジェクトを返します。

```
{
    "value": "7241",
    "card_type": "premium"
}
```

このオブジェクトは、[RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html)、[RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html)、および [StartConversation](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_StartConversation.html) オペレーションによって返される `resolvedValues` オブジェクトに、 JSON シリアル化された文字列として返されます。

## 文法スロットタイプの追加
<a name="adding-grammar-slot-type"></a>

**文法スロットタイプを追加するには**

1. スロットタイプの XML 定義を S3 バケットにアップロードします。バケット名、ファイルへのパスを書き留めておきます。
**注記**  
ファイルの最大サイズは 100 KB です。

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/) で Amazon Lex コンソールを開きます。

1. 左側のメニューから **[ボット]** を選択し、文法スロットタイプを追加するボットを選択します。

1. **[言語を表示]** を選択し、文法スロットタイプを追加する言語を選択します。

1. **[スロットタイプを表示]** を選択します。

1. **[スロットタイプを追加]** を選択し、スロットタイプに名前を付けて、**[追加]** を選択します。

1. インテントに名前を付けて、**[追加]** を選択します。

1. 定義ファイルが含まれている S3 バケットを選択し、ファイルへのパスを入力します。**Save slot type** を選択します。