AFINN:I'm your Huckleberry
現在來切換到 AFINN 詞彙庫。AFINN 詞彙庫的分數是從 5 到 -5 的數值,而不僅是正面或負面。與 Bing 詞彙庫的 sentiment 欄不同,AFINN 詞彙庫的情緒分數欄位名稱是 value。
和之前一樣,你會先套用 inner_join(),再用 count()。接著,為了彙總每一行的分數,我們會用到 dplyr 的 group_by() 與 summarize() 函式。group_by() 會把既有的資料框轉成依「群組」進行運算的群組化資料框。然後,summarize() 讓你以彙總函式(例如 sum() 或 mean())計算每個群組的值。因此,在我們的例子中可以像這樣撰寫:
data_frame %>%
group_by(book_line) %>%
summarize(total_value = sum(book_line))
在整齊化版本的《Huckleberry Finn》中,第 9703 行包含了「best」、「ever」、「fun」、「life」與「spirit」等詞。「best」與「fun」的 AFINN 分數分別是 3 與 4。彙總後,第 9703 行的總分會是 7。
在 tidyverse 中,因為語法更簡潔且涵蓋了 subset() 的功能,通常會偏好使用 filter() 而非 subset()。以下範例示範如何在 data_frame 上使用 filter() 篩選 column1 等於 24 的列。注意欄位名稱不需要加引號。
filter(data_frame, column1 == 24)
afinn 物件包含 AFINN 詞彙庫。huck 物件則是 Mark Twain 的《Adventures of Huckleberry Finn》為了分析而整理成的整齊化版本。
第 5400 行的內容是:All the loafers looked glad; I reckoned they was used to having fun out of Boggs.(資料集中已經移除了停用詞與標點符號。)
本練習屬於課程
R 情感分析
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# See abbreviated line 5400
huck %>% filter(line == 5400)
# What are the scores of the sentiment words?
afinn %>% filter(word %in% c("fun", "glad"))
huck_afinn <- huck %>%
# Inner Join to AFINN lexicon
inner_join(___, by = c("___" = "___")) %>%
# Count by value and line
___(___, ___)