Stressed Out!
ここでは、特定のテキストに合わせてネガティブ語彙を調整します。 そのうえで、基本の polarity() スコアとカスタムのスコアを比較します。
Twenty One Pilots の人気曲に「Stressed Out」があります。 歌詞をざっと読むと、若き日のノスタルジーがテーマであることがわかります。 全体として、多くの人は極性(ポラリティ)はネガティブだと感じるでしょう。 歌詞では繰り返し、ストレス、不安、そして「ふるまう(pretending)」といった表現が登場します。
この曲の歌詞を、デフォルトの主観性レキシコンと、カスタムのレキシコンの両方で比較してみましょう。
最初に、追加したい用語がすでに key.pol の主観性レキシコンに含まれていないことを確認する必要があります。 確認方法の1つは grep() を使うことです。 grep() は、検索パターンに一致する文字を含む行を返します。 以下は、インデックス参照で使う例です。
data_frame[grep("search_pattern", data_frame$column), ]
スラングや新語がすでに key.pol レキシコンにないことを確認したら、追加します。 次のコードは、新しいレキシコンを構築するために sentiment_frame() を使っています。 このコードでは、sentiment_frame() は元のポジティブ語ベクトル positive.words を受け取ります。 次に、元の negative.words に、いずれもネガティブなスラングとみなされる "smh" と "kappa" を連結しています。 重みは指定することもできますが、デフォルトは 1 と -1 なので、以下では省略しています。
custom_pol <- sentiment_frame(positive.words, c(negative.words, "hate", "pain"))
これで極性スコアを適用する準備ができました。これ以降は「カスタム」主観性レキシコンが参照されます!
この演習はコースの一部です
Rで学ぶSentiment Analysis
演習の手順
Twenty One Pilots の「Stressed Out」の歌詞を含む stressed_out を用意しました。
polarity()をstressed_outに適用し、デフォルトのスコアを確認します。- "stress" を含む語が
key.polにあるか確認します。grep()を使い、x列を検索してデータフレームをインデックス指定してください。 - 新しい感情データフレームとして
custom_polを作成します。- まず、
sentiment_frame()を呼び出し、最初の引数にpositive.wordsを、新しい用語は連結せずにそのまま渡します。 - 次に、
c()を使って、negative.wordsに新しい用語 "stressed" と "turn back" を連結します。
- まず、
- もう一度
polarity()をstressed_outに適用し、追加パラメータpolarity.frame = custom_polを指定して、新しい語がスコアをどのように変え、曲の内容をより正確に表すかを比較します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# stressed_out has been pre-defined
head(stressed_out)
# Basic lexicon score
___(___)
# Check the subjectivity lexicon
___[___("stress", x)]
# New lexicon
custom_pol <- ___(___, c(negative.words, "___", "___"))
# Compare new score
___(___, polarity.frame = ___)