政治家の発言を可視化し、問題解決に取り組んでいるかを調べる [by ChatGPT]

:::note info
この記事は[N/S高等学校 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/n-s-highschool)の21日目の記事です。
:::


この記事は OpenAI の ChatGPT によってサポートされ執筆されています。ChatGPT は大規模な言語モデルであり、自然言語を処理する能力が高いです。しかし、ChatGPT は人間のように理解することはできず、単に与えられた文章を生成するだけです。そのため、記事の内容の正確性を保証するために人間によって画像の添付や一部コードやテキストの修正などが行われている可能性があります。また、記事投稿時点での動作の確認は人間が行っていることをご了承ください。

## 政治家の発言を可視化する背景と目的

近年、政治家の発言や行動に対する問題が指摘されることが多いです。そのため、政治家がどのような課題や問題に取り組んでいるかを可視化することで、問題解決に取り組んでいるかを調べることができます。これにより、問題が解決されているかどうかを確認することができ、より良い政策を提供することができるかもしれません。

## 国会会議録検索システムのAPIを使用する理由

国会会議録検索システムは、国会で行われる議事録を検索することができるサービスです。APIを使用することで、プログラムから自動で議事録を取得することができます。今回は、政治家の発言を可視化するために、議事録から政治家の発言を取得することを目的としてAPIを使用します。APIのドキュメントは[こちら](https://kokkai.ndl.go.jp/api.html)で公開されています。

## テキストマイニングの方法

次に、Pythonを用いたテキストマイニングの方法を紹介します。以下では、実際にコードを用いて説明を行います。使用するモジュールは以下の通りです。

### requests

requestsモジュールで日本の国会会議録検索システムのAPIにアクセスします。この記事では、試しに岸田文雄氏の発言を取得することを想定しています。

このモジュールは、Pythonに標準で含まれていませんので、以下のコマンドを実行してインストールしてください。

```bash
pip install requests
```

次に、APIにリクエストを送信して発言を取得するコードを紹介します。

```py
import requests

# 国会会議録検索システムのAPIのエンドポイント
endpoint = "https://kokkai.ndl.go.jp/api/1.0/speech"

# APIにリクエストを送信するためのパラメーター
params = {
    "speaker": "岸田文雄",  # 発言者
    "recordPacking": "json",  # レスポンスの形式
}

# APIにリクエストを送信して発言を取得
response = requests.get(endpoint, params=params)

# 発言のデータをJSON形式で取得
data = response.json()

# 岸田文雄氏の発言を格納する配列
speeches = []

# speechRecord配列から発言を取得
for i in data["speechRecord"]:
    speech = i["speech"]
    speeches.append(speech)

# 岸田文雄氏の発言を表示
print(speeches)
```
### janome

次に、janomeモジュールを使用して発言を形態素解析するコードを紹介します。janomeは、日本語のテキストを形態素解析するためのモジュールです。形態素解析とは、テキストを単語や品詞などに分解することを指します。これにより、テキスト内容を分析することができます。

janomeは、MeCabと同様に日本語のテキストを形態素解析することができますが、記事投稿者が使い慣れているため、今回はjanomeを使用することにしました。

janomeは、pipを使用してインストールすることができます。以下のコマンドを実行してください。


```bash
pip install janome
```

次に、janomeを使用してspeeches配列に格納されている文章から名詞を取り出すコードを紹介します。


```bash
from janome.tokenizer import Tokenizer

# 形態素解析用のインスタンスを生成
t = Tokenizer()

# 名詞を格納する配列
nouns = []

# 岸田文雄氏の発言を形態素解析
for speech in speeches:
    # 形態素解析を行う
    tokens = t.tokenize(speech)
    # 名詞を取り出す
    for token in tokens:
        # 品詞が名詞であるかを判定
        if token.part_of_speech.startswith("名詞"):
            nouns.append(token.base_form)

# 名詞を表示
print(nouns)
```

上記のコードでは、janomeのTokenizerクラスを使用して発言を形態素解析しています。t.tokenizeメソッドを使用することで、引数で渡したテキストを形態素解析し、結果をリストとして返します。

### wordcloud

次に、janomeで取り出した名詞を用いてWordCloudを生成します。WordCloudは、テキストデータを可視化するためのライブラリです。

WordCloudを使用するには、まずpipでインストールする必要があります。以下のコマンドを実行してください。

```bash
pip install wordcloud
```

次に、以下のようなコードを使用してWordCloudを生成します。

```bash
from wordcloud import WordCloud

# テキストを結合して一つの文字列にする
text = " ".join(nouns)

# WordCloudを生成する
wordcloud = WordCloud(font_path="C:\\Windows\\Fonts\\meiryo.ttc", background_color="white").generate(text)

# WordCloudを画像として保存する
wordcloud.to_file("wordcloud.png")
```

上記のコードでは、janomeで取り出した名詞を結合して一つの文字列にします。次に、WordCloudクラスを使用してWordCloudを生成します。生成する際に、背景色やフォントのパスなどの設定を行うことができます。生成したWordCloudを`to_file`メソッドで画像として`wordcloud.png`という名前で保存しています。

これで、WordCloudを生成する流れができました。最終的な一連の手順をまとめたコードは以下のようになります。

```bash
import requests
from janome.tokenizer import Tokenizer
from wordcloud import WordCloud

# 国会会議録検索システムのAPIにアクセスする
endpoint = "https://kokkai.ndl.go.jp/api/1.0/speech"
params = {"speaker": "岸田文雄", "recordPacking": "json"}
response = requests.get(endpoint, params=params)

# レスポンスを取得する
results = response.json()

# 名詞を格納する配列
nouns = []

# 形態素解析
t = Tokenizer()

# speechRecord配列にアクセスし、名詞を抽出する
for speech in results["speechRecord"]:
    tokens = t.tokenize(speech["speech"])
    for token in tokens:
        if token.part_of_speech.startswith("名詞"):
            nouns.append(token.base_form)

# ワードクラウドを生成する
wordcloud = WordCloud(font_path="C:\\Windows\\Fonts\\meiryo.ttc", background_color="white").generate(" ".join(nouns))

# 画像を保存する
wordcloud.to_file("wordcloud.png")
```

## まとめ

![wordcloud.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759440/4f66eb7b-7175-52fb-189c-1f22ba09c4f9.jpeg)

今回は、政治家の発言を可視化する方法を紹介しました。これらの方法を使用することで、政治家がどのような課題や問題に取り組んでいるかをより把握することができるでしょう。また、問題解決に取り組んでいるかを調べることで、政治家の信用度を知ることができるでしょう。

今後も、APIやテキストマイニングを使用したデータ分析について、詳しく紹介していきたいと思います。