0
1

Pythonで自然言語処理 (NLP) を使って感情分析をしてみた

Last updated at Posted at 2024-08-19

こんにちは!今回は、Pythonを使って簡単な感情分析を行う方法を紹介します。感情分析は、テキストデータがポジティブ(肯定的)かネガティブ(否定的)かを判断する技術です。これを通じて、NLP(自然言語処理)の基本を学びましょう。

1. 必要なライブラリのインストール

まず、必要なライブラリをインストールします。以下のコマンドを実行してください。

pip install numpy pandas scikit-learn nltk

これで、データの前処理や機械学習モデルの構築に必要なツールが揃います。

2. データの読み込み

次に、ユーザーレビューが格納されたCSVファイルを読み込みます。レビューには、テキストの内容とそれがポジティブかネガティブかを示すラベルが含まれています。

import pandas as pd

# CSVファイルからデータを読み込む
data = pd.read_csv('sentiment_reviews.csv')
print(data.head())

この段階で、データが正しく読み込まれているかを確認しましょう。

3. データの前処理

データを分析する前に、テキストの前処理が必要です。具体的には、テキストを小文字に変換し、不要な単語(ストップワード)を除去し、ステミング処理を行います。

import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
import re

# NLTKライブラリからストップワードをダウンロード
nltk.download('stopwords')

# テキストの前処理を行う関数
def preprocess_text(text):
    # テキストを小文字に変換
    text = text.lower()
    # 特殊文字を除去
    text = re.sub(r'\W', ' ', text)
    # ストップワードを除去
    text = ' '.join([word for word in text.split() if word not in stopwords.words('english')])
    # ステミング処理
    stemmer = PorterStemmer()
    text = ' '.join([stemmer.stem(word) for word in text.split()])
    return text

# テキスト列に前処理を適用
data['processed_review'] = data['review'].apply(preprocess_text)
print(data.head())

これで、レビューが分析に適した形に変換されます。

4. テキストの数値化

テキストデータを機械学習モデルで扱うためには、数値ベクトルに変換する必要があります。ここでは、TF-IDF(Term Frequency-Inverse Document Frequency)を使用します。

from sklearn.feature_extraction.text import TfidfVectorizer
# テキストをTF-IDFベクトルに変換
vectorizer = TfidfVectorizer(max_features=5000)
X = vectorizer.fit_transform(data['processed_review']).toarray()

これで、テキストデータが数値データに変換され、モデルに入力できるようになりました。

5. モデルの訓練

感情を分類するために、ロジスティック回帰(Logistic Regression)モデルを使用します。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# データを訓練セットとテストセットに分割
X_train, X_test, y_train, y_test = train_test_split(X, data['sentiment'], test_size=0.2, random_state=42)

# モデルの初期化と訓練
model = LogisticRegression()
model.fit(X_train, y_train)

# テストセットで予測
y_pred = model.predict(X_test)

# 精度を計算
accuracy = accuracy_score(y_test, y_pred)
print(f'モデルの精度: {accuracy * 100:.2f}%')

モデルの精度を確認して、どの程度正確に感情を分類できるかを評価します。

6. まとめ

以上の手順で、簡単な感情分析のモデルを作成しました。これにより、テキストデータがポジティブかネガティブかを自動的に判定できるようになりました。PythonとNLPの組み合わせは非常に強力で、これを応用すれば、さまざまなテキストデータを解析することができます。

ぜひ、このコードをカスタマイズして、あなたのプロジェクトに役立ててください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1