AWS TranscribeのJSON出力を整理しつつテキスト化するPowerShellスクリプトを書いてみた。
動作仕様というかプロンプト
書いてみたというけど、実際にはChatGPT 4oとの共作で、最初のうちは生成されたスクリプトを手作業でエラー解決したり動作改善させたりしていって、最後はプロンプト一発でこのスクリプトを生成させるところまでいった。
動作仕様の説明にもなると思われる、最終的なプロンプトは以下。
概要
AWS TranscribeのJSON出力を、読みやすいテキストに整理するPowerShellスクリプトを必要としています。
処理方法
- 入力JSONファイルを出力テキストファイル名を引数で受け取ります。
- 入力JSONファイルを読み込みます。
ConvertFrom-Json
を使い、変数$data
に格納します。 -
$data.result.items
を$items
に格納します。 -
$items
に格納されたアイテムを順に処理します。以下では個々のアイテムを$item
とします。$item
は以下の情報を持ちます。-
$item.alternatives[0].content
が発話テキストです。 -
$item.speaker_label
は発話者名です。 -
$item.start_time
は開始時刻、$item.end_time
は終了時刻が、秒で格納されています。ただしこれらを持たないアイテムもあります。
-
- 以下のいずれかを満たすとき、そのアイテムを新しい発言の開始位置とみなします。
- 前のアイテムと発話者が違う
- 前のアイテムの終了時刻と、いまのアイテムの開始時刻が、3秒以上空いている
- 前のアイテムが
。
または.
で終わっている。
- ひとまとまりの発言を、以下の情報を持つアイテムにまとめてください。
-
content
に、この発言の全部の発話テキストが連結されて格納されている。連結時、前のアイテムの発話テキストが英数字で終わっており、このアイテムの発話テキストが英数字で始まっているときは、半角空白を挟む。 -
start_time
に、一つの発言にまとめられた全アイテムのうち、最初に開始時刻を持っていたアイテムの開始時刻が格納されている。 -
end_time
に、一つの発言にまとめられた全アイテムのうち、最後に終了時刻を持っていたアイテムの終了時刻が格納されている。 -
speaker_label
に、この発言の最初に出てきた発話者名が格納されている。
-
- 全アイテムの処理が終わったら、結果を出力テキストファイルに出力します。
- 前の発言の終了時刻と、この発言の開始時刻が3秒以上空いている場合、または前の発言とこの発言の発言者が違う場合、空行を挟みます。
- 出力時に、開始時刻と終了時刻は
h:mm:ss
の形式に変換します。 - 発言の末尾には改行を一つ入れます。
指示
上記を行うPowerShellスクリプトを出力してください。