เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

มากกว่าแค่คำ: การแบ่งโทเคน (2)

แพ็กเกจ tidytext ช่วยให้วิเคราะห์ข้อมูลข้อความโดยใช้แพ็กเกจในกลุ่ม "tidyverse" เช่น dplyr และ sparklyr ได้ การวิเคราะห์ sentiment เชิงลึกอยู่นอกขอบเขตของคอร์สนี้ สามารถศึกษาเพิ่มเติมได้ที่ Sentiment Analysis แบบฝึกหัดนี้จะให้ลองสัมผัสวิธีทำบน Spark อย่างรวดเร็ว

การวิเคราะห์ sentiment คือการกำหนดคะแนนหรืออารมณ์ให้กับแต่ละคำ ตัวอย่างเช่น ใน AFINN lexicon คำว่า "outstanding" มีคะแนน +5 เนื่องจากมักใช้ในบริบทเชิงบวก คำว่า "grace" มีความหมายเชิงบวกเล็กน้อย ได้คะแนน +1 ส่วนคำว่า "fraud" มักใช้ในบริบทเชิงลบ จึงได้คะแนน -4 ชุดข้อมูลคะแนน AFINN สามารถดึงได้จาก get_sentiments("afinn") เพื่อความสะดวก ข้อมูลคำที่แบ่งโทเคนแล้วและ sentiment lexicon ถูกคัดลอกไปยัง Spark เรียบร้อยแล้ว

โดยทั่วไป เราต้องการเปรียบเทียบ sentiment ระหว่างกลุ่มข้อมูลต่าง ๆ รูปแบบโค้ดที่ใช้มีดังนี้

text_data %>%
  inner_join(sentiments, by = "word") %>%
  group_by(some_group) %>%
  summarize(positivity = sum(score))

การทำ inner join คือการนำค่าทั้งหมดจากตารางแรก แล้วค้นหาค่าที่ตรงกันในตารางที่สอง หากพบค่าที่ตรงกัน จะนำข้อมูลจากตารางที่สองมาเพิ่ม ต่างจาก left join ตรงที่แถวที่ไม่มีคู่ตรงกันจะถูกตัดออก ดังที่แสดงในแผนภาพนี้

An inner join, explained using table of colors.

เช่นเดียวกับ left join, inner join เป็นประเภทหนึ่งของ mutating join เนื่องจากจะเพิ่มคอลัมน์ใหม่ลงในตารางแรก ลองเดาดูว่าควรใช้ฟังก์ชันใดสำหรับ inner join และใช้อย่างไร (คำใบ้: วิธีใช้คล้ายกับ left_join(), anti_join() และ semi_join() มาก!)

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

แนะนำ Spark ด้วย sparklyr ใน R

ดูคอร์ส

คำแนะนำการฝึกหัด

สร้าง Spark connection ไว้ให้แล้วในชื่อ spark_conn และ tibble ที่เชื่อมกับข้อมูลคำในชื่อเพลงและ sentiment lexicon ที่เก็บอยู่ใน Spark ถูกกำหนดไว้ล่วงหน้าเป็น title_text_tbl และ afinn_sentiments_tbl ตามลำดับ

  • สร้างตัวแปรชื่อ sentimental_artists จาก title_text_tbl
    • ใช้ inner_join() เพื่อ join afinn_sentiments_tbl เข้ากับ title_text_tbl โดยใช้ "word"
    • จัดกลุ่มตาม artist_name
    • ใช้ summarize เพื่อสร้างตัวแปร positivity ซึ่งมีค่าเท่ากับผลรวมของฟิลด์ score
  • ค้นหาศิลปิน 5 อันดับแรกที่มีชื่อเพลงเชิงลบมากที่สุด
    • เรียง sentimental_artists ตาม positivity จากน้อยไปมาก
    • ใช้ slice_max เพื่อดึง 5 ผลลัพธ์แรก
  • ค้นหาศิลปิน 5 อันดับแรกที่มีชื่อเพลงเชิงบวกมากที่สุด
    • เรียง sentimental_artists ตาม positivity จากมากไปน้อย
    • ดึง 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
  ___
แก้ไขและรันโค้ด