开始使用免费开始使用

不止于词:分词与标记化 (2)

tidytext 包让您可以使用 "tidyverse" 家族(如 dplyrsparklyr)来分析文本数据。情感分析的完整方法超出本课程范围;您可在 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))

内连接会取第一张表中的所有值,并在第二张表中查找匹配;若找到匹配,则把第二张表中的数据追加过来。与左连接不同,它会丢弃未能匹配到的行。下图展示了这一原理。

An inner join, explained using table of colors.

与左连接类似,内连接也是一种"变异连接",因为它会向第一张表添加列。请尝试猜一猜用于内连接的函数,以及如何使用它。(提示:其用法与 left_join()anti_join()semi_join() 非常相似!)

本练习是课程的一部分

R 中使用 sparklyr 的 Spark 入门

查看课程

练习说明

已为您创建 Spark 连接 spark_conn。已将标题中的词和存放在 Spark 中的情感词典分别预定义为 title_text_tblafinn_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
  ___
编辑并运行代码