感情による内省
この演習では、ポジティブ/ネガティブという単純な抽出を超えて、Plutchikの感情の輪にある8つの感情ごとにテキストを抽出し、ビジュアルを作成します。これにより、単なるポジティブ/ネガティブではなく、特定の感情に対応づけることで、単語の使われ方がより明確になります。
tidytext の主観性辞書「nrc」を使い、テキストとinner_join()を行います。「nrc」辞書には、8つの感情に加えて、positive と negative の語彙クラスも含まれています。そのため、inner_join()の後で positive と negative の語を除外する必要があります。方法の一つは、否定 ! と grepl() を使うやり方です。
「Global Regular Expression Print Logical」関数である grepl() は、各行で文字列パターンが見つかったかどうかを True または False で返します。この演習では、| 演算子を使って positive もしくは negative を検索します。これは「or」を表し、キーボードではエンターキーの上にある縦棒で表されることが多いです。! による否定が grepl() の前に付くため、T/F が反転し、"positive|negative" に一致するものは保持ではなく除外されます。
Object <- tibble %>%
filter(!grepl("positive|negative", column_name))
次に、特定された単語に対して count() を適用し、pivot_wider() と組み合わせてデータフレームを整形します。
comparison.cloud() は行名を持つ入力を必要とするため、row.names 引数を指定して base R の data.frame に変換する必要があります。
この演習はコースの一部です
Rで学ぶSentiment Analysis
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
moby_tidy <- moby %>%
# Inner join to nrc lexicon
___(___, by = c("term" = "word")) %>%
# Drop positive or negative
___(!___("___", sentiment)) %>%
# Count by sentiment and term
___(___, ___) %>%
# Pivot sentiment, using n for values
___(names_from = ___, values_from = ___, values_fill = ___) %>%
# Convert to data.frame, making term the row names
data.frame(row.names = "___")
# Examine
head(moby_tidy)