不止于词:分词与标记化 (2)
tidytext 包让您可以使用 "tidyverse" 家族(如 dplyr 和 sparklyr)来分析文本数据。情感分析的完整方法超出本课程范围;您可在 Sentiment Analysis 课程中深入了解。本练习旨在让您快速体验如何在 Spark 上进行这类分析。
情感分析的核心是为每个单词分配一个分值或情绪。例如,在 AFINN 词典中,单词 "outstanding" 的分值为 +5,因为它几乎总在正面语境中使用。"grace" 略偏正面,分值为 +1。"fraud" 通常用于负面语境,分值为 -4。AFINN 分值数据集可通过 get_sentiments("afinn") 获取。为方便起见,已将展开后的词数据和情感词典复制到了 Spark。
通常,您会想比较多个数据分组的情感倾向。可使用如下代码模式:
text_data %>%
inner_join(sentiments, by = "word") %>%
group_by(some_group) %>%
summarize(positivity = sum(score))
内连接会取第一张表中的所有值,并在第二张表中查找匹配;若找到匹配,则把第二张表中的数据追加过来。与左连接不同,它会丢弃未能匹配到的行。下图展示了这一原理。

与左连接类似,内连接也是一种"变异连接",因为它会向第一张表添加列。请尝试猜一猜用于内连接的函数,以及如何使用它。(提示:其用法与 left_join()、anti_join() 和 semi_join() 非常相似!)
本练习是课程的一部分
R 中使用 sparklyr 的 Spark 入门
练习说明
已为您创建 Spark 连接 spark_conn。已将标题中的词和存放在 Spark 中的情感词典分别预定义为 title_text_tbl 和 afinn_sentiments_tbl。
- 从
title_text_tbl创建名为sentimental_artists的变量。- 使用
inner_join()按"word"将afinn_sentiments_tbl连接到title_text_tbl。 - 按
artist_name分组。 - 汇总并定义变量
positivity,其值等于score字段之和。
- 使用
- 找出歌曲标题情感最负面的前 5 位艺人。
- 按
positivity升序排列sentimental_artists。 - 使用
slice_max获取前 5 个结果。
- 按
- 找出歌曲标题情感最正面的前 5 位艺人。
- 按
positivity降序排列sentimental_artists。 - 获取前 5 个结果。
- 按
交互式实操练习
通过完成这段示例代码来试试这个练习。
# title_text_tbl, afinn_sentiments_tbl have been pre-defined
title_text_tbl
afinn_sentiments_tbl
sentimental_artists <- title_text_tbl %>%
# Inner join with sentiments on word field
___ %>%
# Group by artist
___ %>%
# Summarize to get positivity
___
sentimental_artists %>%
# Arrange by ascending positivity
___ %>%
# Get top 5
___
sentimental_artists %>%
# Arrange by descending positivity
___ %>%
# Get top 5
___