始める無料で始める

積み上げ棒グラフで比較してみよう

テキストを別の角度から見る方法として、文書全体のうち前向き(ポジティブ)な語と後ろ向き(ネガティブ)な語がそれぞれどれくらい含まれているかを把握するやり方があります。たとえばレストランのレビューでは「料理は良かった」と書かれていても、その後に「店内は汚く、スタッフは無礼で、駐車場は最悪だった」と続くかもしれません。そこで、文書のうちポジティブとネガティブのどちらに多くの分量が割かれているかを把握したくなります。この例では、ポジティブよりネガティブの割合が高くなります。

そのための1つの方法は、ポジティブ語とネガティブ語をそれぞれcount()で数え、特性語(subjectivity words)の総数で割ることです。レストランの例では、"good" はポジティブ1件、"dirty"、"rude"、"awful" はネガティブ3件として数えます。特性語が合計4件なので、単純計算ではそのレビューは25%がポジティブ、75%がネガティブと判断できます。

まずは、4冊の本(Agamemnon、Oz、Huck Finn、Moby Dick)を1つにまとめた tidy データフレームに対してinner_join()を実行します。前の演習と同様に、filter()grepl()を使います。

count()を実行するには、まず本ごと、次に感情ごとにデータをグループ化する必要があります。たとえば Agamemnon のポジティブ語は一度グループ化してから合計し、他の本のポジティブ語と混ざらないようにします。幸い、count()には複数の変数を直接渡せます。

この演習はコースの一部です

Rで学ぶSentiment Analysis

コースを見る

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Review tail of all_books
tail(all_books)

# Count by book & sentiment
books_sent_count <- all_books %>%
  # Inner join to nrc lexicon
  ___(___, by = c("term" = "word")) %>% 
  # Keep only positive or negative
  ___(__("___", sentiment)) %>% 
  # Count by book and by sentiment
  ___(___, ___)
  
# Review entire object
books_sent_count
コードを編集して実行