มากกว่าแค่คำ: การแบ่งโทเคน (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 ตรงที่แถวที่ไม่มีคู่ตรงกันจะถูกตัดออก ดังที่แสดงในแผนภาพนี้

เช่นเดียวกับ 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()เพื่อ joinafinn_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
___