NLTKのVader Lexiconで感情極性スコア

NLTKとは?

NLTK(Natural Language Toolkit)は、Pythonで利用できる、自然言語処理(NLP)のためのライブラリの一つです。

Vader Lexiconとは?

VADER(Valence Aware Dictionary and sEntiment Reasoner)Lexiconは、特にソーシャルメディアテキストなどのオンラインコミュニケーションに適用するために設計された感情分析のための辞書です。

この記事では、NLTKのVader Lexiconを使ってセンチメント分析を行ってみます。環境はGoogle Corabです。

インストール

pip install nltk

セットアップ

import nltk
from nltk.sentiment import SentimentIntensityAnalyzer

nltk.download('vader_lexicon')

sia = SentimentIntensityAnalyzer()

Vader Lexiconをダウンロードして、SentimentIntensityAnalyzerを初期化します。

感情極性スコアを出力

texts = [
    "I love this phone, its super fast and the camera is amazing!",
    "I hate this movie. It was the worst movie ever!",
    "It's okay, not great, but not bad either."
]

for text in texts:
    print(f"Text: {text}")
    scores = sia.polarity_scores(text)
    print(f"Scores: {scores}\n")

それではセンチメント分析を行います。
3つのコメントを用意し、それぞれスコアを出力してみます。
それぞれ上からポジティブ、ネガティブ、ニュートラル寄りのコメントとなっています。

Scores: {'neg': 0.0, 'neu': 0.396, 'pos': 0.604, 'compound': 0.9215}
Scores: {'neg': 0.536, 'neu': 0.464, 'pos': 0.0, 'compound': -0.8439}
Scores: {'neg': 0.174, 'neu': 0.404, 'pos': 0.422, 'compound': 0.4728}

compoundは全体的な感情となっており、上からポジティブ、ネガティブ、ニュートラル寄りの感情極性スコアが出力されています。

sia.polarity_scores("この携帯が大好きです、とても速くてカメラが素晴らしい!")

{'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound': 0.0}

残念ながらVader Lexiconは英語のテキストに最適化されており、特に英語のスラングや絵文字、文脈依存の表現を分析するために設計されています。そのため、日本語の辞書は含まれておらず、日本語テキストに直接適用してもスコアの出力がうまくいきません。