

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

# Amazon Chime SDK のライブ文字起こしメッセージについて
<a name="process-msgs"></a>

Amazon Chime SDK サービスは、データメッセージで `TranscriptEvent` オブジェクトを送信することにより、文字起こし情報を参加者と共有します。`TranscriptEvent` は `Transcript` または `TranscriptionStatus` を配信します。

`Transcript` には、タイムスタンプとユーザー属性が付いた単語および句読点を含む結果が含まれます。結果が「部分的」なものになることもありますが、その場合は通常、後続の `TranscriptEvent` で更新されます。これにより、文字起こしをすばやく確認することができ、必要に応じて後でインラインで更新を適用することもできます。

`TranscriptStatus` は、次のセクションの例にリストされている `TranscriptionStatusType` イベントのいずれかを配信します。

新しいバージョンの Amazon Chime SDK には、`TranscriptEvent` の一般的な処理に使用する追加のデータ型とヘルパー関数が含まれています。

## TranscriptEvent
<a name="transcript-event"></a>

この例は、典型的な文字起こしイベントを示しています。

```
type TranscriptEvent = Transcript | TranscriptionStatus;

export class TranscriptEventConverter {
  static from(dataMessage: DataMessage): TranscriptEvent[] {
    // convert DataMessage to TranscriptEvents
    return ...
  }
}

export default class TranscriptionStatus {
    type: TranscriptionStatusType;
    eventTimeMs:                   number;
    transcriptionRegion:           string;
    transcriptionConfiguration:    string;
    message?:                      string;
}

enum TranscriptionStatusType {
    STARTED        =    'started',
    INTERRUPTED    =    'interrupted',
    RESUMED        =    'resumed',
    STOPPED        =    'stopped',
    FAILED         =    'failed',
}

export default class Transcript {
    results: TranscriptResult[];    // at least one
}

export class TranscriptResult {
    resultId:        string;
    isPartial:       boolean;
    startTimeMs:     number;
    endTimeMs:       number;
    alternatives:    TranscriptAlternative[];    // most confident first
    }

export default class TranscriptAlternative {
    items: TranscriptItem[];    // in start time order
    transcript: string; //concatenated transcript items
    entities?: TranscriptEntity[];
}

export default class TranscriptItem {
    type:                      TranscriptItemType;
    startTimeMs:               number;
    endTimeMs:                 number;
    attendee:                  Attendee;
    content:                   string;
    vocabularyFilterMatch?:    boolean;
    confidence?:               number;  
    stable?:                   boolean;
}

enum TranscriptItemType {
    PRONUNCIATION    =    'pronunciation',// content is a word
    PUNCTUATION      =    'punctuation',// content is punctuation
}

export default class TranscriptEntity {  
    category:       string;  
    confidence:     number;  
    content:        string;  
    endTimeMs:      number;  
    startTimeMs:    number;  
    type?:          string;
}

// This is an existing SDK model
export default class Attendee {
    attendeeId:        string;
    externalUserId:    string;
}
```

## データのガイドライン
<a name="data-guidelines"></a>

これらのガイドラインに留意しながら作業を進めてください。

1. `transcription.results` には複数の結果が含まれる場合があります。

1. `transcription.results[i].isPartial = true` の場合、結果全体が更新される可能性があります。更新される可能性は高いですが、確実に更新されるわけではありません。更新後も `transcript.result[i].resultId` は同じです。信頼度の低い文字起こしを回避したい場合は、部分的な結果を完全にスキップできます。低レイテンシーの結果が必要な場合は、いったん部分的な結果を表示してから、後で更新が到着したときに完全に上書きすることができます。

1. `transcription.results[i].alternatives` には、常に少なくとも 1 つのエントリが含まれます。複数のエントリが含まれる場合は、最も信頼度の高いエントリがリストの先頭に表示されます。ほとんどの場合、`transcription.results[i].alternatives` の最初のエントリを採用し、その他のエントリは無視できます。

1. `transcription.results[i].alternatives[j].items` には、各単語または句読点のエントリが含まれます。

1. `transcription.results[i].alternatives[j].items[k].` content には、発言内容が含まれます。

1. `transcription.results[i].alternatives[j].items[k].attendee` は、コンテンツのユーザー属性 (誰) です。

1. `transcription.results[i].alternatives[j].items[k].startTimeMs` は、コンテンツの「いつ」です。これにより、異なるユーザーによる発言が、その発言順序に従ってユーザー属性付きで文字起こしされて、単語ごとにレンダリングできるようになります。

1. `transcription.results[i].alternatives[j].items[k].endTimeMs` フィールドは通常は無視して構いませんが、誰がいつ何を言ったかを完全に把握できるように提供されています。

1. `transcription.results[i].alternatives[j].items[k].vocabularyFilterMatch` は、コンテンツがフィルター内の単語と一致した場合は true、それ以外の場合は false です。

1. `transcription.results[i].alternatives[j].items[k].confidence` は、0～1 の値です。これは、項目のコンテンツが発言と正しく一致しているというエンジンの信頼度を示します。0 が最も低い信頼度、1 が最も高い信頼度を示します。

1. `transcription.results[i].alternatives[j].items[k].stable` は、現在の単語が部分的な結果の更新によって将来的に変更されるかどうかを示します。この値が true になるのは、リクエストで `EnablePartialResultsStabilization` を `true` に設定して部分的な結果の安定化機能を有効にした場合だけです。

1. `transcription.results[i].alternatives[j].entities` には、コンテンツ識別またはリダクション機能によって検出された各エンティティのエントリが含まれます。このリストには、コンテンツ識別またはリダクションを有効にした場合にのみ値が入ります。エンティティは、個人情報や個人の健康情報などのデータである可能性があります。エンティティを使用して、文字起こし中に関心のある単語に対して、強調表示したり、アクションを実行したりすることができます。

1. `transcription.results[i].alternatives[j].entities[k].category` はエンティティのカテゴリです。これは、リクエストで提供されたコンテンツ識別またはリダクションのタイプ (「PII」や「PHI」などの) と同じです。

1. `transcription.results[i].alternatives[j].entities[k].confidence` は、特定のコンテンツが本当にエンティティであることに対するエンジンの信頼度を示します。これは、単語そのものの正確さに対するエンジンの信頼度を示す項目レベルの信頼度とは異なることに注意してください。

1. `transcription.results[i].alternatives[j].entities[k].content` は、エンティティを構成する実際のテキストです。これは、複数の項目 (住所など) である場合もあります。

1. `transcription.results[i].alternatives[j].entities[k].startTimeMs` は、当該エンティティの発言が開始された時刻をキャプチャします。

1. `transcription.results[i].alternatives[j].entities[k].endTimeMs` は、当該エンティティの発言が終了した時刻をキャプチャします。

1. `transcription.results[i].alternatives[j].entities[k].type` は、文字起こしエンジンでのみサポートされ、エンティティのサブタイプを提供します。これらは、`ADDRESS`、`CREDIT\$1DEBIT\$1NUMBER` などの値です。

## TranscriptEvents のイベントハンドラーの登録
<a name="register-handler"></a>

以下の例では、JavaScript 用の Amazon Chime SDK クライアントライブラリを使用しています。ただし、パターンはすべての Amazon Chime SDK で一貫しています。

`RealtimeController` および `RealtimeControllerFacade` の `TranscriptionController` には、`TranscriptionEvents` を処理するハンドラーを追加するための特定の関数が含まれています。

```
/** 
 * Returns the [[TranscriptionController]] for this real-time controller. 
 */
readonly transcriptionController?: TranscriptionController;
```

`TranscriptionController` には、`TranscriptionEvent` コールバックのサブスクライブとサブスクライブ解除を管理する 2 つの関数があります。

```
import TranscriptEvent from './TranscriptEvent';

export default interface TranscriptionController {
  /**
   * Subscribe a callback to handle received transcript event
   */
  subscribeToTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void;

  /** 
   * Unsubscribe a callback from receiving transcript event 
   */
  unsubscribeFromTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void;
}
```

**オプションの `TranscriptionController` を使用する**  
`TranscriptionController` インターフェイスのデフォルト実装 (`DefaultTranscriptionController` という名前) が用意されています。`DefaultRealtimeController` および `DefaultAudioVideoFacade` のデフォルト実装では、`DefaultTranscriptionController` オブジェクトが返されます。

```
/** 
get transcriptionController(): TranscriptionController {
   return this.realtimeController.transcriptionController;
}
```

`DefaultRealtimeController` では、そのコンストラクターにオプションの `TranscriptionController` オブジェクトを指定することもできます。これにより、`DefaultTranscriptionController` の動作をオーバーライドできます。デベロッパーアプリケーションは、`AudioVideoFacade` オブジェクトの `TranscriptionController` オブジェクトを通じて、1 つ以上のコールバックをサブスクライブまたはサブスクライブ解除します。

```
// Subscribe
this.audioVideo.transcriptionController?.subscribeToTranscriptEvent(this.transcriptEventHandler);

// Unsubscribe
this.audioVideo.transcriptionController?.unsubscribeFromTranscriptEvent(this.transcriptEventHandler););
```