🐷

自然言語処理(NLP)技術を用いた感情分析の実装

2024/01/17に公開

感情分析の実装方法

感情分析は、自然言語処理技術を使用して、与えられたテキストから感情や感情のニュアンスを抽出するタスクです。この記事では、Pythonを使用して感情分析を実装する基本的な手順を説明します。

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

最初に、感情分析に使用するライブラリをインストールします。以下のコマンドでNLTKとTextBlobをインストールします。

pip3 install nltk
pip3 install textblob

NLTKのデータセットのダウンロード

次に、データセットをダウンロードします。

download.py
import nltk
nltk.download('vader_lexicon')
python3 download.py

実装

main.py
from textblob import TextBlob
from nltk.sentiment import SentimentIntensityAnalyzer

sample_text = "This movie is good"

# TextBlobを使用した感情分析
analysis = TextBlob(sample_text)

print("------ TextBlob ------")
# 感情極性スコア
polarity_score = analysis.sentiment.polarity
print(f'Polarity(極性): {polarity_score}')

# 主観性スコア
subjectivity_score = analysis.sentiment.subjectivity
print(f'Subjectivity(主観性): {subjectivity_score}')

# NLTKを使用した感情分析
sia = SentimentIntensityAnalyzer()

print("------ nltk ------")
# 感情スコア
sentiment_scores = sia.polarity_scores(sample_text)

# ポジティブスコア
positive_score = sentiment_scores['pos']
print(f'Positive(ポジティブ): {positive_score}')

# ネガティブスコア
negative_score = sentiment_scores['neg']
print(f'Negative(ネガティブ): {negative_score}')

# 合計スコア
compound_score = sentiment_scores['compound']
print(f'Compound(合計): {compound_score}')

このコードでは、TextBlobおよびNLTKを使用して、与えられたテキストの感情スコアを取得します。感情スコアが正の場合はポジティブな感情、負の場合はネガティブな感情を示します。

実行

python3 main.py
------ TextBlob ------
Polarity(極性): -0.6999999999999998
Subjectivity(主観性): 0.6666666666666666
------ nltk ------
Positive(ポジティブ): 0.0
Negative(ネガティブ): 0.538
Compound(合計): -0.5423

TextBlobの感情分析スコア

TextBlobは、テキストから感情極性スコアを計算していて、主な属性は次の通りです。
Polarity(極性): -1から1までの値で、-1は完全にネガティブ、1は完全にポジティブな感情を表します。0は中立を示します。
Subjectivity(主観性): 0から1までの値で、0は非常に客観的であることを示し、1は非常に主観的であることを示します。

NLTKの感情分析スコア

NLTK(Natural Language Toolkit)の感情分析では、VADERセンチメント分析ツールを使用します。VADERは、ポジティブ、ネガティブ、および中立の感情スコアを計算します。主な属性は次の通りです。
Positive(ポジティブ): 0から1までの値で、1に近いほどポジティブな感情を示します。
Negative(ネガティブ): 0から1までの値で、1に近いほどネガティブな感情を示します。
Compound(合計): -1から1までの値で、-1は完全にネガティブ、1は完全にポジティブな感情を示します。0は中立を示します。

実験

まずは下記の文を分析してみます。

実験1

sample_text = "This movie is good."

結果

------ TextBlob ------
Polarity(極性): 0.7
Subjectivity(主観性): 0.6000000000000001
------ nltk ------
Positive(ポジティブ): 0.492
Negative(ネガティブ): 0.0
Compound(合計): 0.4404

どちらの結果もポジティブな分析結果になりました。
次によりポジティブになるだろう文を分析してみます。

実験2

sample_text = "This movie is best."

結果

------ TextBlob ------
Polarity(極性): 1.0
Subjectivity(主観性): 0.3
------ nltk ------
Positive(ポジティブ): 0.583
Negative(ネガティブ): 0.0
Compound(合計): 0.6369

実験1よりもポジティブが強くなっています。

実験3

次にネガティブな文を分析してみます。

sample_text = "This movie is bad."

結果

------ TextBlob ------
Polarity(極性): -0.6999999999999998
Subjectivity(主観性): 0.6666666666666666
------ nltk ------
Positive(ポジティブ): 0.0
Negative(ネガティブ): 0.538
Compound(合計): -0.5423

実験1,2よりネガティブが強くなっています。

感想

簡単な文章でしか試してないがポジティブかネガティブかを分析することができました。Xの投稿を分析かけておその人がポジティブ思考かネガティブ思考か判断することもできるなと思いました。

Discussion