技術関連メディア

Streamlitを用いて30分で感情分析ツールを開発してみた

streamlitは扱いやすくて楽しい。

<開発環境>

OS:Windows11

IDE:VSCode

言語:Python

パッケージ:Textblob,NLTK

streamlitの環境設定についてはこちら

初期設定が済んだ前提で進めていきます。

ターミナルに打ち込む

NLP(自然言語処理)をやっていきたいので、NLTKをインストールします。

先ずはテキスト処理が必要なため、

pip install streamlit textblob

を記述してTextblobをインストールします。

ここからは注意点があります。NLTKをインストールするために

python -m textblob.download_corpora

を行うと最新バージョンがインストールされるのですが、2024/10/09時点では最新バージョン(NLTK3.9.1)でバグが発生しているようでして、正常に機能しません。その為、

pip install nltk==3.8.1

を追加で行う必要があります。これで分析が可能となります。

Pythonコードを書く

コードは下記の通りです。

import streamlit as st
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer

#必要なデータをダウンロード
nltk.download('vader_lexicon')

#背景色を変更するためのCSSを追加
st.markdown(
    """
    <style>
    .stApp {
        background-color: lightblue;
    }
    </style>
    """,
    unsafe_allow_html=True
)

#タイトル
st.title("Emotional analysis tool for text using NLP(感情分析ツール)")

#ユーザーからテキスト入力を受け取る
text = st.text_area("Please enter the text you wish to analyze(分析したいテキストを入力してください):")

if text:
    #感情分析
    sia = SentimentIntensityAnalyzer()
    sentiment = sia.polarity_scores(text)

    #結果の表示
    st.subheader("Emotional Analysis Results(感情分析結果)")
    st.write(f"positive(ポジティブ度): {sentiment['pos']}")
    st.write(f"negative(ネガティブ度): {sentiment['neg']}")
    st.write(f"neutrality(中立度): {sentiment['neu']}")
    st.write(f"Total Score(合計スコア): {sentiment['compound']}")  #総合的な感情スコア

    #テキストの要約
    st.subheader("summarization(要約)")
    sentences = text.split('. ')  #文の分割(文末のピリオドで)
    summary = " ".join(sentences[:3])  #最初の3文を要約
    st.write(summary)

※今回は要約機能には拘っていません。飾りです。

実行結果

ちょこっと豆知識

【 unsafe_allow_htmlについて

streamlitは簡単に記述ができる分、HTMLとCSSを直接埋め込む形となります。

unsafeとあるように、unsafe_allow_html=TrueはXSS攻撃等のリスクがあります。

現時点では強くおすすめできるプラットフォームとは言い難いですが、個人でPythonを扱う分には面白いツールです。Pythonやセキュリティの学習として活用してみてください(。・ω・。)ノシ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA