Amazon ComprehendとAmazon QuickSightを使ってテキストデータの頻出語を可視化してみる

日本国憲法の中で1番頻出するワードは「その他」のようでした
2023.09.27

こんにちは、洲崎です。
Amazon Comprehend(以下:Comprehend)は自然言語処理(NLP)を利用したドキュメントの内容を分析することができるサービスです。
Comprehendを使用すると、ドキュメント リポジトリ全体をスキャンして頻出語などを抽出することができます。
AWS BlogでComprehendで抽出したデータをAmazon QuickSight(以下:QuickSight)で可視化する記事があったのでやってみました。

構成図

構成図はこちらです。
AWS Blogより抜粋)
事前にテキストデータを用意して、S3バケットに格納し、Comprehendで分析をかけます。
Comprehendより抽出されたデータをもとにAWS GlueのGlue CrawlerでAthenaの分析用のテーブルを作成します。
そのテーブルを利用してQuickSight(Athena)でデータを可視化します。

やってみる

S3バケットにテキストデータをアップロード

今回は日本国憲法のテキストを利用しました。
UTF-8形式で保存し、S3バケットにアップロードします。

Comprehend

Comprehendでテキストデータを分析します。
Analysis typeを「Key phrase」にして、テキストのフレーズを抽出します。
日本語も対応しているので、言語は「Japanese」を選択します。
Input dataにテキストデータを格納したS3バケット、Output dataに抽出後のデータを格納するS3バケットを指定します。
Access permissionsにComprehendで利用するIAMロールを指定 or 作成します。
全て入力できたら「Create job」をクリックします。

少し待って、ステータスが「Completed」になることを確認します。

Output dataで指定していたS3バケットを見にいき、output.tar.gzファイルをダウンロードしてローカルで解凍します。

解凍したファイルをS3バケットに格納し、それ以外のフォルダ・ファイルは削除します。

Glue Crawler

Comprehendで抽出したデータをもとにGlue Crawlerで分析用のテーブルを作成します。
Glueのコンソールを開き、Crawlersから「Create crawler」をクリックします。

Nameを入力し、data sourceで格納しているS3バケットを指定します。

Glue Crawlerで利用するIAMロールを作成 or 指定します。

内容を確認したら、右下の「Create crawler」をクリックします。

作成できたら、「Run crawler」をクリックします。

Athena

Athenaのコンソールからクエリエディタを開き、テーブルにGlue Crawlerで作成したテーブルがあることを確認します。

クエリエディタに下記SQLを入力・実行し、一時データベースを作成します。

CREATE TABLE temp AS
SELECT keyphrases, nested
FROM /* Glue Crawlerで作成したテーブル名 */
CROSS JOIN UNNEST(/* Glue Crawlerで作成したテーブル名 */.keyphrases) AS t (nested)


作成したデータベースをもとに、グループ化と、最も多く出現するワードに並び替えるクエリを実行します。

CREATE TABLE tableforquicksight AS
SELECT COUNT(*) AS count, nested.text
FROM temp
WHERE nested.Score > .9
GROUP BY nested.text
ORDER BY count desc


QuickSight

QuickSightを開き、データセットを作成します。
「新しいデータセット」をクリックします。

データソースをAthena、データソース名を入力し、「データソースを作成」をクリックします。

Athenaのクエリエディタで作成したテーブルを指定し、「選択」をクリックします。

SPICEでも問題ないですが、少し動作確認をしたいレベルなので、「データクエリを直接実行」にして、「Visualize」をクリックします。

ビジュアルタイプを雲のマーク(Word Cloud)で、グループ化の条件に「text」、サイズに「count(合計)」を入れると、頻出ワードを可視化することができました。

最後に

Amazon ComprehendとAmazon QuickSightでテキストデータを分析してみました。
基本的にAWSのマネージドサービスで完結できるのが魅力です。
他にも、例えばAmazon Connectの通話で文字起こしした内容を分析するなどにも応用できそうだなと思ったので、別でやってみます。

ではまた!コンサルティング部の洲崎でした。