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))
在整洁版的《哈克贝利·芬恩》中,第 9703 行包含单词 "best"、"ever"、"fun"、"life" 和 "spirit"。其中 "best" 和 "fun" 的 AFINN 分别为 3 和 4。聚合后,第 9703 行的总分为 7。
在 tidyverse 中,建议用 filter() 代替 subset(),因为它在更简洁的语法下整合了 subset() 的功能。下面示例对 data_frame 进行 filter(),筛选 column1 等于 24 的记录。请注意列名不加引号。
filter(data_frame, column1 == 24)
afinn 对象包含 AFINN 词典。huck 对象是马克·吐温的《哈克贝利·芬恩历险记》的整洁版,用于分析。
第 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
___(___, ___)