

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

# ステップ 4: データ可視化用に Amazon Comprehend 出力を準備する
<a name="tutorial-reviews-tables"></a>

データ可視化を作成する際に感情分析ジョブとエンティティ分析ジョブの結果を準備するには、 AWS Glue と Amazon Athenaを使用します。このステップでは、Amazon Comprehend の結果ファイルを抽出します。次に、データを調べ、自動的に AWS Glue Data Catalogの表にカタログ化する AWS Glue クローラーを作成します。その後、サーバーレスでインタラクティブなクエリサービスを使用して Amazon Athena、これらのテーブルにアクセスして変換します。このステップが完了すると、Amazon Comprehend の結果はクリーンになり、可視化できる状態になります。

PII エンティティ検出ジョブの場合、出力ファイルは圧縮されたアーカイブではなくプレーンテキストです。出力ファイル名は入力ファイルと同じで、末尾に `.out` が付加されます。出力ファイルを抽出する手順は必要ありません。をスキップして [ にデータをロードします AWS Glue Data Catalog](#tutorial-reviews-tables-crawler)。



**Topics**
+ [前提条件](#tutorial-reviews-tables-prereqs)
+ [出力をダウンロードする](#tutorial-reviews-tables-download)
+ [出力ファイルを抽出する](#tutorial-reviews-tables-extract)
+ [抽出したファイルをアップロードする](#tutorial-reviews-tables-upload)
+ [データを にロードする AWS Glue Data Catalog](#tutorial-reviews-tables-crawler)
+ [分析するデータを準備する](#tutorial-reviews-tables-prep)

## 前提条件
<a name="tutorial-reviews-tables-prereqs"></a>

始める前に、[ステップ 3: Amazon S3 上のドキュメントに対する分析ジョブの実行](tutorial-reviews-analysis.md) を完了します。

## 出力をダウンロードする
<a name="tutorial-reviews-tables-download"></a>

Amazon Comprehend は Gzip 圧縮を使用して出力ファイルを圧縮し、tar アーカイブとして保存します。出力ファイルを抽出する最も簡単な方法は、`output.tar.gz` アーカイブをローカルにダウンロードすることです。

このステップでは、感情とエンティティの出力アーカイブをダウンロードします。

### 出力ファイルをダウンロードする (コンソール)　
<a name="tutorial-reviews-tables-download-console"></a>

各ジョブの出力ファイルを見つけるには、Amazon Comprehend コンソールの分析ジョブに戻ります。　 分析ジョブは出力用の S3 の場所を提供し、そこに出力ファイルをダウンロードできます。　

**出力ファイルをダウンロードするには (コンソール)**

1. [Amazon Comprehend コンソール](https://console.aws.amazon.com/comprehend/)のナビゲーションペインで、[**分析ジョブ**]に移動します。

1. 感情分析ジョブ `reviews-sentiment-analysis` を選択します。

1. **[Output]** (出力) で、**[Output data location]** (出力データの場所) の隣に表示されるリンクをクリックします。これにより、S3 バケットの `output.tar.gz` アーカイブにリダイレクトします。

1. **[Overview]** (概要) タブで、**[Download]** (ダウンロード) を選択します。

1. コンピュータ上で、アーカイブの名前を `sentiment-output.tar.gz` に変更します。出力ファイルにはすべて同じ名前が付いているので、感情ファイルとエンティティファイルを追跡しやすくなります。

1. ステップ 1 ～ 4 を繰り返して、 `reviews-entities-analysis` ジョブの出力を検索してダウンロードします。コンピュータ上で、アーカイブの名前を `entities-output.tar.gz` に変更します。

### 出力ファイルをダウンロードする (AWS CLI)
<a name="tutorial-reviews-tables-download-cli"></a>

各ジョブの出力ファイルを検索するには、分析ジョブの `JobId` を使用して出力の S3 ロケーションを検索します。次に、`cp` コマンドを使用して出力ファイルをコンピュータにダウンロードします。

**出力ファイルをダウンロードするには (AWS CLI)**

1. 感情分析ジョブの詳細を表示するには、以下のコマンドを実行します。`{{sentiment-job-id}}` を、保存した感情 `JobId` と置き換えます。

   ```
   aws comprehend describe-sentiment-detection-job --job-id {{sentiment-job-id}}
   ```

   `JobId` を見失った場合は、以下のコマンドを実行してすべての感情ジョブを一覧表示し、ジョブを名前でフィルタリングすることができます。

   ```
   aws comprehend list-sentiment-detection-jobs 
   --filter JobName="reviews-sentiment-analysis"
   ```

1. `OutputDataConfig` オブジェクト内の `S3Uri` 値を検索します。`S3Uri` 値の形式は次のようになります: `{{s3://amzn-s3-demo-bucket/.../output/output.tar.gz}}` この値をテキストエディタにコピーします。　

1. 感情出力アーカイブをローカルディレクトリにダウンロードするには、以下のコマンドを実行します。S3 バケットパスを、前の手順でコピーした `S3Uri` に置き換えます。`{{path/}}` を、ローカルディレクトリへのフォルダパスと置き換えます。名前 `sentiment-output.tar.gz` は元のアーカイブ名に置き換わるため、感情ファイルやエンティティファイルを追跡しやすくなります。

   ```
   aws s3 cp {{s3://amzn-s3-demo-bucket/.../output/output.tar.gz}} 
   {{path/}}sentiment-output.tar.gz
   ```

1. エンティティ分析ジョブの詳細を表示するには、以下のコマンドを実行します。

   ```
   aws comprehend describe-entities-detection-job
   --job-id {{entities-job-id}}
   ```

   `JobId` が不明な場合は、次のコマンドを実行してエンティティジョブをすべて一覧表示し、ジョブを名前でフィルタリングします。

   ```
   aws comprehend list-entities-detection-jobs
   --filter JobName="reviews-entities-analysis"
   ```

1. エンティティのジョブの説明内の `OutputDataConfig` オブジェクトから、`S3Uri` 値をコピーします。

1. エンティティ出力アーカイブをローカルディレクトリにダウンロードするには、以下のコマンドを実行します。　 S3 バケットパスを、前の手順でコピーした `S3Uri` に置き換えます。`{{path/}}` を、ローカルディレクトリへのフォルダパスと置き換えます。名前 `entities-output.tar.gz` は元のアーカイブ名に置き換わります。

   ```
   aws s3 cp {{s3://amzn-s3-demo-bucket/.../output/output.tar.gz}} 
   {{path/}}entities-output.tar.gz
   ```

## 出力ファイルを抽出する
<a name="tutorial-reviews-tables-extract"></a>

Amazon Comprehend の結果にアクセスする前に、感情とエンティティのアーカイブを解凍します。ローカルファイルシステムまたはターミナルのいずれかを使用してアーカイブを解凍できます。　 

### 出力ファイルを抽出する (GUI ファイルシステム)
<a name="tutorial-reviews-tables-extract-gui"></a>

macOS を使用している場合は、GUI ファイルシステムのアーカイブをダブルクリックして、アーカイブから出力ファイルを抽出します。　

Windows を使用している場合は、7-Zip などのサードパーティ製のツールを使用して、GUI ファイルシステムの出力ファイルを抽出できます。　 Windows で、アーカイブ内の出力ファイルにアクセスするには 2 つの手順を実行する必要があります。　 最初にアーカイブを解凍し、次にアーカイブを抽出します。　

出力ファイルを区別できるように、感情ファイルの名前を `sentiment-output` に、エンティティファイルの名前を `entities-output` に変更します。

### 出力ファイルを抽出する (ターミナル)
<a name="tutorial-reviews-tables-extract-terminal"></a>

Linux または macOS を使用している場合は、標準のターミナルを使用できます。　 Windows を使用している場合、tar コマンドを実行するには Cygwin などの Unix スタイルの環境にアクセスできる必要があります。

感情出力ファイルを感情アーカイブから抽出するには、ローカルターミナルで次のコマンドを実行します。

```
tar -xvf sentiment-output.tar.gz --transform 's,^,sentiment-,'
```

`--transform` パラメーターは、アーカイブ内の出力ファイルにプレフィックス `sentiment-` が追加され、ファイル名が `sentiment-output` に変更されることに注意してください。これにより、感情とエンティティの出力ファイルを区別し、上書きを防ぐことができます。

エンティティ出力ファイルをエンティティアーカイブから抽出するには、ローカルターミナルで次のコマンドを実行します。

```
tar -xvf entities-output.tar.gz --transform 's,^,entities-,'
```

`--transform` パラメーターは、出力ファイル名にプレフィックス `entities-` を追加します。

**ヒント**  
Amazon S3 のストレージコストを節約するために、アップロードする前に Gzip でファイルを再度圧縮できます。は tar アーカイブからデータを自動的に読み取る AWS Glue ことができないため、元のアーカイブを解凍することが重要です。ただし、 AWS Glue は Gzip 形式のファイルから読み取ることができます。

## 抽出したファイルをアップロードする
<a name="tutorial-reviews-tables-upload"></a>

ファイルを抽出したら、バケットにアップロードします。がデータを正しく AWS Glue 読み取るには、感情とエンティティの出力ファイルを別々のフォルダに保存する必要があります。バケットに、抽出されたセンチメント結果用のフォルダと、抽出されたエンティティ結果用の 2 つ目のフォルダを作成します。フォルダは、Amazon S3 コンソールまたは AWS CLIで作成できます。

### 抽出したファイルを Amazon S3 にアップロードする (コンソール)
<a name="tutorial-reviews-tables-upload-console"></a>

S3 バケットに、抽出された感情結果用のフォルダ 1 つと、エンティティ結果ファイル用のフォルダ 1 つを作成します。次に、抽出した結果ファイルをそれぞれのフォルダにアップロードします。　

**抽出したファイルを Amazon S3 にアップロードするには (コンソール)**

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. **[バケット]** でバケットを選択し、**[フォルダを作成]** を選択します。

1. 新しいフォルダ名に、`sentiment-results` を入力して、**[保存]** を選択します。このフォルダには、抽出された感情出力ファイルが含まれます。

1. バケットの **[概要]** タブのバケットコンテンツのリストから、新しいフォルダ `sentiment-results` を選択します **アップロード** を選択します。

1. **[ファイル追加]** を選択し、ローカルコンピュータから `sentiment-output` ファイルを選択して、**[次へ]** を選択します。

1. ユーザー**の管理**、**他の へのアクセス AWS アカウント**、**パブリックアクセス許可の管理**のオプションをデフォルトのままにします。[**次へ**] を選択します。

1. **[ストレージクラス]**で、**[スタンダード]**を選択します。**[暗号化]** 、**[メタデータ]** 、**[タグ]** のオプションはデフォルトのままにします。[**次へ**] を選択します。

1. アップロードオプションを確認し、[**アップロード**] を選択します。

1. ステップ 1 ～ 8 を繰り返して `entities-results` という名前のフォルダを作成し、その `entities-output` フォルダにファイルをアップロードします。

### 抽出したファイルを Amazon S3 にアップロードする (AWS CLI)
<a name="tutorial-reviews-tables-upload-cli"></a>

`cp` コマンドを使用してファイルをアップロードすると S3 バケットにフォルダを作成できます。

**抽出したファイルを Amazon S3 にアップロードするには (AWS CLI)**

1. 感情フォルダを作成し、以下のコマンドを実行して感情ファイルをアップロードします。`{{path/}}` を、抽出した感情出力ファイルのローカルパスに置き換えます。

   ```
   aws s3 cp {{path/}}sentiment-output s3://amzn-s3-demo-bucket/sentiment-results/
   ```

1. エンティティ出力フォルダを作成し、以下のコマンドを実行してエンティティファイルをアップロードします。`{{path/}}` を、抽出したエンティティ出力ファイルのローカルパスに置き換えます。

   ```
   aws s3 cp {{path/}}entities-output s3://amzn-s3-demo-bucket/entities-results/
   ```

## データを にロードする AWS Glue Data Catalog
<a name="tutorial-reviews-tables-crawler"></a>

結果をデータベースに取り込むには、 アン AWS Glue *クローラー*を使用できます。 AWS Glue *アンクローラー*はファイルをスキャンしてデータのスキーマを検出します。次に、データを AWS Glue Data Catalog (サーバーレスデータベース) のテーブルに配置します。クローラは、 AWS Glue コンソールまたは を使用して作成できます AWS CLI。

### データを にロードする AWS Glue Data Catalog (コンソール)
<a name="tutorial-reviews-tables-crawler-console"></a>

`sentiment-results` および AWS Glue `entities-results`フォルダを個別にスキャンする クローラを作成します。 AWS Glue の IAM ロールは、S3 バケットへのアクセス許可をクローラーに付与します。この IAM ロールはクローラーの設定時に作成します。

**データを にロードするには AWS Glue Data Catalog (コンソール)**

1. がサポートするリージョンにいることを確認します AWS Glue。別の地域にいる場合は、ナビゲーションバーの **[地域セレクター]** からサポートされている地域を選択します。がサポートするリージョンのリストについては AWS Glue、 *グローバルインフラストラクチャガイド*の[リージョン表](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)を参照してください。

1. [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) で AWS Glue コンソールを開きます。

1. ナビゲーションペインで、[**クローラー**]、[**クローラーの追加**] の順に選択します。

1. [**クローラー名**] に「`comprehend-analysis-crawler`」と入力し、[**次へ**] を選択します。

1. [**クローラーソースタイプ**] で、[**データストア**]、[**次へ**] の順に選択します。

1. [**データストアの追加**]で、次の操作を行います。

   1. [**Choose a data store (データストアの選択) **] で [**S3**] を選択します。

   1. [**条件**]は空白にしておきます。

   1. **[データをクロールする]**で、**[自分のアカウントで指定したパス]**を選択します。

   1. **[パスを含める]**には、感情出力フォルダ `s3://amzn-s3-demo-bucket/sentiment-results` の S3 フルパスを入力します。

   1. [**次へ**] を選択します。

1. **[別のデータストアの追加]**で **[はい]**、**[次へ]**の順に選択します。ステップ 6 を繰り返しますが、エンティティ出力フォルダの完全な S3 パス (`s3://amzn-s3-demo-bucket/entities-results`) を入力します。

1. **[別のデータストアの追加]**で、**[いいえ]**、**[次へ]**の順に選択します。

1. **[IAM ロールの選択]**で、以下のいずれかの操作を行います。

   1. [**IAM ロールの作成**]を選択します。

   1. **[IAM ロール]** には、`glue-access-role` と入力して **[次へ]** を選択します。

1. **[このクローラーのスケジュールを作成]** で **[オンデマンドで実行]**、**[次へ]** の順に選択します。

1. [**クローラーの出力を設定する**]で、次の操作を行います。

   1. [**データベース**]で、[**データベースを追加**]を選択します。

   1. [**Database name (データベース名)**] に「`comprehend-results`」と入力します。このデータベースには、Amazon Comprehend の出力テーブルが保存されます。

   1. 他のオプションをデフォルト設定のままにして、**[次へ]** をクリックします。

1. クローラー情報を確認してから、**[終了]**を選択します。

1. Glue コンソールの **[クローラー]** で `comprehend-analysis-crawler` を選択し、**[クローラーを実行]** を選択します。クローラーが終了するまでに数分かかることがあります。

### AWS Glue Data Catalog (AWS CLI) にデータをロードする
<a name="tutorial-reviews-tables-crawler-cli"></a>

S3 バケットへのアクセス許可を付与 AWS Glue する の IAM ロールを作成します。次に、 AWS Glue Data Catalogにデータベースを作成します。最後に、データベース内のテーブルにデータをロードするクローラーを作成して実行します。　

**AWS Glue Data Catalog (AWS CLI) にデータをロードするには**

1. の IAM ロールを作成するには AWS Glue、以下を実行します。

   1. 次の信頼ポリシーを `glue-trust-policy.json` いう JSON ドキュメントとしてコンピュータに保存します。

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "glue.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

------

   1. IAM ロールを作成するには、次のコマンドを実行します。`{{path/}}` をローカルコンピュータの JSON ドキュメントパスに置き換えます。

      ```
      aws iam create-role --role-name glue-access-role
      --assume-role-policy-document file://{{path/}}glue-trust-policy.json
      ```

   1. が新しいロールの Amazon リソースナンバー (ARN) を AWS CLI 一覧表示したら、テキストエディタにコピーして保存します。

   1. 次の IAM ポリシーを `glue-access-policy.json` という JSON ドキュメントとしてコンピュータに保存します。このポリシーは、結果フォルダをクロールする AWS Glue アクセス許可を付与します。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetObject",
                      "s3:PutObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-bucket/sentiment-results*",
                      "arn:aws:s3:::amzn-s3-demo-bucket/entities-results*"
                  ]
              }
          ]
      }
      ```

------

   1. IAM ポリシーを作成するには、次のコマンドを実行します。`{{path/}}` をローカルコンピュータの JSON ドキュメントパスに置き換えます。

      ```
      aws iam create-policy --policy-name glue-access-policy
      --policy-document file://{{path/}}glue-access-policy.json
      ```

   1. がアクセスポリシーの ARN を AWS CLI 一覧表示したら、テキストエディタにコピーして保存します。

   1. 次のコマンドを実行して、新しいポリシーを IAM ロールにアタッチします。`{{policy-arn}}` を、前のステップでコピーした IAM ポリシー ARN に置き換えます。

      ```
      aws iam attach-role-policy --policy-arn {{policy-arn}}
      --role-name glue-access-role
      ```

   1. 次のコマンドを実行して`AWSGlueServiceRole`、 AWS 管理ポリシーを IAM ロールにアタッチします。

      ```
      aws iam attach-role-policy --policy-arn
      arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole
      --role-name glue-access-role
      ```

1. 次のコマンドを実行して、 AWS Glue データベースを作成します。

   ```
   aws glue create-database 
   --database-input Name="comprehend-results"
   ```

1. 次のコマンドを実行して、新しい AWS Glue クローラを作成します。を IAM ロールの ARN AWS Glue `{{glue-iam-role-arn}}`に置き換えます。

   ```
   aws glue create-crawler 
   --name comprehend-analysis-crawler
   --role {{glue-iam-role-arn}} 
   --targets S3Targets=[
   {Path="s3://amzn-s3-demo-bucket/sentiment-results"},
   {Path="s3://amzn-s3-demo-bucket/entities-results"}] 
   --database-name comprehend-results
   ```

1. 次のコマンドを使用して、クローラーを起動します。

   ```
   aws glue start-crawler --name comprehend-analysis-crawler
   ```

   クローラーが終了するまでに数分かかることがあります。

## 分析するデータを準備する
<a name="tutorial-reviews-tables-prep"></a>

これで、Amazon Comprehend の結果が入力されたデータベースができました。ただし、結果はネストされています。ネストを解除するには、いくつかの SQL ステートメントを で実行します Amazon Athena。 Amazon Athena は、標準の SQL を使用して Amazon S3 内のデータを簡単に分析できるインタラクティブなクエリサービスです。Athena はサーバーレスなので管理するインフラストラクチャがなく、クエリ単位の料金体系を採用しています。このステップでは、分析と視覚化に使用できる、クリーンアップされたデータを含む新しいテーブルを作成します。Athena コンソールを使用してデータを準備します。

**データを準備するには**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

1. クエリエディタで、[**設定**] を選択し、[**管理**] を選択します。

1. **[クエリ結果の場所]** には、`s3://amzn-s3-demo-bucket/query-results/` と入力します。これにより、実行する Amazon Athena クエリの出力を保存する という名前の新しいフォルダがバケット`query-results`に作成されます。**[保存]** を選択します。

1. クエリエディタで、**[エディタ]**を選択します。

1. **Database** で、`comprehend-results`作成した AWS Glue データベースを選択します。

1. **[テーブル]** セクションには、`sentiment_results` と `entities_results` という 2 つのテーブルがあります。テーブルをプレビューして、クローラーがデータを読み込んだことを確認します。各テーブルのオプション (テーブル名の横にある 3 つの点) で、**[テーブルのプレビュー]**を選択します。ショートクエリは自動的に実行されます。**[結果]** ウィンドウをチェックして、テーブルにデータが含まれていることを確認します。
**ヒント**  
テーブルにデータがない場合は、S3 バケット内のフォルダを確認してみてください。　 エンティティ結果用のフォルダが 1 つと、感情結果用のフォルダが 1 つあることを確認します。次に、新しい AWS Glue クローラを実行してみてください。

1. `sentiment_results` テーブルのネストを解除するには、次のクエリを**クエリエディタ**に入力し、[**実行**]を選択します。

   ```
   CREATE TABLE sentiment_results_final AS
   SELECT file, line, sentiment,
   sentimentscore.mixed AS mixed,
   sentimentscore.negative AS negative,
   sentimentscore.neutral AS neutral,
   sentimentscore.positive AS positive
   FROM sentiment_results
   ```

1. エンティティテーブルのネスト解除を開始するには、**クエリエディタ**に次のクエリを入力し、**[実行]**を選択します。

   ```
   CREATE TABLE entities_results_1 AS
   SELECT file, line, nested FROM entities_results
   CROSS JOIN UNNEST(entities) as t(nested)
   ```

1. エンティティテーブルのネスト解除を開始するには、**クエリエディタ**に次のクエリを入力し、 **[クエリを実行]**を選択します。

   ```
   CREATE TABLE entities_results_final AS
   SELECT file, line,
   nested.beginoffset AS beginoffset,
   nested.endoffset AS endoffset,
   nested.score AS score,
   nested.text AS entity,
   nested.type AS category
   FROM entities_results_1
   ```

`sentiment_results_final` テーブルは以下のようになり、**[ファイル]** 、**[行]** 、**[感情]** 、**[ミックス]** 、**[ネガティブ]** 、**[ニュートラル]** 、**[ポジティブ]** という名前の列があるはずです。テーブルには、1 セルごとに値が 1 つ含まれている必要があります。**[感情]** 列には、特定のレビューについて最も可能性の高い全体的な感情が表示されます。**[ミックス]** 、**[ネガティブ]** 、**[ニュートラル]** 、**[ポジティブ]** の各列には、感情のタイプごとにスコアが表示されます。

![Athena 内の感情出力テーブルのスクリーンショット。](http://docs.aws.amazon.com/ja_jp/comprehend/latest/dg/images/tutorial-reviews-sentiment-table.png)


`entities_results_final` テーブルは以下のようになり、**[ファイル]** 、**[行]** 、**[開始オフセット]** 、**[終了オフセット]** 、**[スコア]** 、**[エンティティ]** 、**[カテゴリ]** という名前の列があります。テーブルには、1 セルごとに値が 1 つ含まれている必要があります。**[スコア]** 列には、検出した**エンティティ**における Amazon Comprehend の信頼度が示されます。**[カテゴリ]** は、Comprehend が検出したエンティティの種類を示します。

![Athena のエンティティ出力テーブルのコンソール表示。](http://docs.aws.amazon.com/ja_jp/comprehend/latest/dg/images/tutorial-reviews-entities-table.png)


これで Amazon Comprehend 結果が表にロードされたので、データから有意義なインサイトを可視化して抽出することができます。