【Streamlit】自然言語処理:感情分析アプリを作ってみよう!

Streamlit
この記事は約8分で読めます。

こんにちは、JS2IIUです。
今回はテキストから感情を分析するアプリをStreamlit上で実現したいと思います。textblobライブラリを活用してアプリを実現します。今回もよろしくお願いします。

1. はじめに

自然言語処理(NLP)は、人間の言葉をコンピュータに理解させる技術です。その中でも「感情分析(Sentiment Analysis)」は、文章の感情(ポジティブ・ネガティブ、中立など)を分類する手法で、商品レビューやSNS投稿、カスタマー対応の自動化などで活用されています。

本記事では、PythonのWebアプリ作成ライブラリ Streamlit を使って、「感情分析アプリ」を作成する方法をみていきます。

2. 今回作るアプリの概要

これから作るアプリは、以下のような機能を持ちます:

  • 入力された英語のテキストを対象に
  • その感情(ポジティブ/ネガティブ/中立)を自動分析
  • 感情スコアを数値で表示(視覚的な表示も)

3. 感情分析ライブラリの比較

感情分析に使えるPythonライブラリは複数あり、それぞれに特徴があります。以下の表に、主要なライブラリを比較してまとめました。

ライブラリ特徴メリットデメリット向いている用途
TextBlob単純な辞書ベースの英語向けライブラリインストールが簡単・使いやすい精度は高くない・英語中心入門学習、英語の簡易分析
VADERソーシャルメディア用に最適化された英語辞書SNS投稿に強い・絵文字やスラングに対応英語特化・日本語非対応ツイート、レビュー分析
TransformersBERTなどの事前学習モデルを使った高精度分析高精度・多言語対応(日本語含む)モデルが重い・事前知識が必要本格的な分析、日本語処理全般

今回は、簡単かつ手軽に扱える「TextBlob」 を使ってアプリを作成します。

4. TextBlobとは?

TextBlob は、英語テキストの解析に特化したシンプルな自然言語処理ライブラリです。

主な機能:

  • 単語や文の分割
  • 品詞タグ付け
  • 単語の辞書ベースの感情分析
  • スペル修正、翻訳(Google Translate利用)

感情分析の仕組み:

TextBlobは各単語に「感情スコア(polarity)」を割り当て、文章全体の平均を計算することで感情を数値化します。

  • スコア範囲: -1.0(非常にネガティブ)~ 1.0(非常にポジティブ)
  • 0付近: 中立的

メリット:

  • 導入が非常に簡単(1行で感情分析が可能)
  • 英語であれば十分に使える精度
  • 学習不要で使えるため、初心者に最適

デメリット:

  • 英語以外(特に日本語)には対応していない
  • 精度はシンプルな辞書ベースなので限界あり

5. 必要なライブラリとインストール

以下のコマンドで必要なライブラリをインストールします。

Bash
pip install streamlit textblob
python -m textblob.download_corpora

これでStreamlitとTextBlobの準備は完了です。

6. アプリを作ろう!ステップバイステップ

🔹 Step 1: 基本のレイアウトを作成

Python
import streamlit as st

st.title("感情分析アプリ")
st.write("入力された文章がポジティブかネガティブかを判定します。")

🔹 Step 2: テキストの入力欄を追加

Python
user_input = st.text_area("文章を入力してください", height=150)

🔹 Step 3: TextBlobで感情分析を実行

Python
from textblob import TextBlob

if st.button("分析する"):
    if user_input:
        blob = TextBlob(user_input)
        polarity = blob.sentiment.polarity

        if polarity > 0:
            st.success(f"ポジティブな内容です! (スコア: {polarity:.2f})")
        elif polarity < 0:
            st.error(f"ネガティブな内容です。 (スコア: {polarity:.2f})")
        else:
            st.info("中立的な内容です。 (スコア: 0.00)")
    else:
        st.warning("文章を入力してください。")

7. アプリ全体のコード

Python
import streamlit as st
from textblob import TextBlob

st.title("感情分析アプリ")
st.write("入力された文章がポジティブかネガティブかを判定します。")

user_input = st.text_area("文章を入力してください", height=150)

if st.button("分析する"):
    if user_input:
        blob = TextBlob(user_input)
        polarity = blob.sentiment.polarity

        if polarity > 0:
            st.success(f"ポジティブな内容です! (スコア: {polarity:.2f})")
        elif polarity < 0:
            st.error(f"ネガティブな内容です。 (スコア: {polarity:.2f})")
        else:
            st.info("中立的な内容です。 (スコア: 0.00)")
    else:
        st.warning("文章を入力してください。")

8. 実行してみよう!

Pythonファイル(例:app.py)を作成して保存したら、以下のコマンドで実行します。

Bash
streamlit run app.py

ブラウザが自動的に起動し、感情分析アプリが表示されます。


9. 試してみたい例文

今回のアプリはtextblobライブラリを使っているため、残念ながら日本語での入力には対応していません。以下のような文章を入力して試してみましょう。実際のスコアは幾つになるでしょうか!?

入力例分析結果
I love this movie. It’s amazing!ポジティブ(スコア約0.8)
This is the worst day of my life.ネガティブ(スコア約-1.0)
It’s okay, not great but not bad.中立(スコア0.0付近)

10. 応用アイデア(発展編)

このアプリを拡張して、以下のような機能を追加することもできます:

  • VADERによるSNS対応(ツイート、レビューなど短文に特化)
  • Transformersモデルによる日本語対応感情分析
  • グラフ表示や履歴保存機能
  • 複数文章の一括分析

11. まとめ

今回は、StreamlitとTextBlobを使って簡単な感情分析アプリ を作成しました。

  • Streamlitを使うことで、PythonコードだけでWebアプリが作れる
  • TextBlobを使えば1行で感情分析が可能
  • 今後はVADERやTransformersなど、より高度な手法への発展も視野に

まずはこのアプリで自然言語処理の基本を楽しく体験してみましょう!

12. 参考リンク

最後に書籍のPRです。
24年11月に第3版が発行された「scikit-learn、Keras、TensorFlowによる実践機械学習 第3版」、Aurélien Géron 著。下田、牧、長尾訳。機械学習のトピックスについて手を動かしながら網羅的に学べる書籍です。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございます。

コメント

タイトルとURLをコピーしました