top of page

เข้าใจเนื้อเพลง Bodyslam ด้วย Python!

Updated: Jul 28, 2021

มาดูกันว่าตำนานที่มีลมหายใจ พูดถึงอะไรบ่อยที่สุดในเพลง อาจจะได้เบาะแสบางอย่าง! เรียนกับ Ultimate Python


วัยรุ่นยุค 90s คงไม่มีใครไม่รู้จักวงดนตรี Rock อันดับ 1 ที่เป็นไอดอลของใครหลายคนกับวง Bodyslam มาถึงวันนี้ พี่ตูน กลายเป็น พ่อตูน และทางแฟนเพจ Rachwin's Family ของทางแม่ก้อยได้ออกมาแจ้งว่า ลูกชายคนใหม่ น่าจะได้ชื่อแล้วซึ่งเป็นคำที่อยู่ในเนื้อเพลง Bodyslam ต่อมาได้มีอัพเดทบอกว่าเป็นคำที่มี 2 พยางค์


 

คำถามคือ เป็นไปได้ไหมที่เขียน Python ให้เข้าใจเนื้อเพลง?

หากใช้การค้นหาคำปกติเราก็คงจะต้องเข้าไปอ่านเนื้อเพลงกว่า 70 เพลง คำทั้งหมดกว่า 20,000 คำ ที่มีคำที่ไม่ซ้ำกันอยู่กว่า 1,600 คำ แต่เราสามารถจัดการข้อมูลเหล่านี้ด้วย Python ได้ดีขึ้นหรือเปล่า?

และเราอาจจะเดาได้แบบมี Data สนับสนุนว่าน้องจะชื่ออะไร!


 

วันนี้เราจะมาใช้ Python ทำความเข้าใจเนื้อเพลงวง Bodyslam ไอดอลของผม และหลายๆ ท่านจากยุค 90s

มาดูซิว่า Bodyslam วงร็อควงนี้พูดถึงอะไรบ้างในเพลงจนกลายเป็นตำนานที่ยังมีลมหายใจอยู่ถึงทุกวันนี้!!


 

Web Scraping & NLP

วันนี้เราจะมาเขียน Python ดึงเนื้อเพลงทั้งหมดบนเวปไซต์มาวิเคราะห์คำที่อยู่ในเนื้อเพลงเพื่อหาคำที่น่าจะใช้เป็นชื่อ ตามคำใบ้ที่อยู่บนแฟนเพจ Rachwin's Family จะออกมาเป็นอย่างไร ได้โปรแกรมหน้าตาประมาณไหน มาดูกัน!


 

Game plan

เราจะเริ่มที่การเก็บข้อมูลจากเวป (Web scraping) เพื่อเก็บข้อมูลทั้งหมด และเตรียมข้อมูล ก่อนที่จะนำไปวิเคราะห์คำที่อยู่ในเนื้อเพลง (Natural Language Processing) และแสดงผลข้อมูลออกมาเป็น Wordclound





 

Web Scraping

เริ่มจากการเก็บข้อมูลเนื้อเพลงทั้งหมด โดยเราจะเก็บจากเวป https://เพลง.meemodel.com โดยมีการแบ่งขั้นตอนดังนี้ 1) เก็บลิ้งค์ที่ไปยังเพลงทุกเพลง 2) เข้าลิ้งค์และเก็บเนื้อเพลง ทำซ้ำจนครบทุกเพลงเราก็จะได้เนื้อเพลงทั้งหมดมา


 

ติดตั้ง/นำเข้าเครื่องมือ

ผ่านคำสั่ง pip install ที่ใช้ติดตั้งเครื่องมือ และ import นำเข้าเครื่องมือ


In [193]:
!pip install bs4
!pip install requests
import bs4
import requests
Requirement already satisfied: bs4 in c:\users\acer\anaconda3\lib\site-packages (0.0.1) Requirement already satisfied: beautifulsoup4 in c:\users\acer\anaconda3\lib\site-packages (from bs4) (4.9.1) Requirement ...



 

ดึงข้อมูลทั้งเวป

ผ่านการดึงข้อมูลจากทั้งเวปด้วยคำสั่ง requests.get() เพื่อดึงข้อมูลจากลิ้งค์ที่ต้องการ และใช้คำสั่ง bs4.BeautifulSoup เพื่อเปลี่ยนของมูลเป็นประเภท BeautifulSoup ให้สามารถใช้เครื่องมือในการดึงข้อมูลที่ต้องได้ง่ายขึ้น


In [194]:
link = 'https://xn--72c9bva0i.meemodel.com/%E0%B8%A8%E0%B8%B4%E0%B8%A5%E0%B8%9B%E0%B8%B4%E0%B8%99/%E0%B8%9A%E0%B8%AD%E0%B8%94%E0%B8%B5%E0%B9%89%E0%B8%AA%E0%B9%81%E0%B8%A5%E0%B8%A1'
data = requests.get(link)
soup = bs4.BeautifulSoup(data.text)
soup
Out[194]:
<!DOCTYPE html> <html lang="th"> <head> <title>บอดี้สแลม (Bodyslam) รายชื่อเพลง</title> <meta charset="utf-8"/> <meta content="IE=edge" http-equiv="X-UA-Compatible"/> <meta content="width=device-width, initial-
...


 

เวปตั้งต้น





 

ดึงรายชื่อเพลง

ผ่านการระบุ HTML Tag ที่เก็บข้อมูลเกี่ยวกับแต่ละเพลงเอาไว้ซึ่งเราจะดึงชื่อเพลง และลิ้งค์ของเพลงที่รวบรวมเนื้อเพลงเอาไว้ ก่อนที่จะใช้ for loop ดึงข้อมูลของแต่ละเพลง เก็บไว้ใน list


In [195]:
all_song = soup.find('table',{'class':'table table-condensed table-striped'})
all_name = []
all_link = []
for row in all_song.find_all('tr'):
 try:
 name, artist, album, tube = row.find_all('td')
 all_name.append(name.text)
 all_link.append('https://xn--72c9bva0i.meemodel.com/' + name.find('a').get('href'))
 except:
 pass




 

รายชื่อเพลงทั้งหมด (จากเวป)


In [196]:
all_name
Out[196]:
['Bodyslam ',  'ขอบคุณน้ำตา ',  'ขอบฟ้า ',  'คนที่ถูกรัก ',  'คนมีตังค์ ',  'คราม ',  'ครึ่งหลับครึ่งตื่น ',  'ครึ่งๆ กลางๆ',  'ความเชื่อ ',  'ความซื่อสัตย์ ',  'ความฝันกับ...


 

ลิ้งค์ไปยังเนื้อเพลงทั้งหมด


In [197]:
all_link
Out[197]:
['https://xn--72c9bva0i.meemodel.com//เนื้อเพลง/Bodyslam_บอดี้สแลม',  'https://xn--72c9bva0i.meemodel.com//เนื้อเพลง/ขอบคุณน้ำตา_บอดี้สแลม',  ...

 

เราจะได้ข้อมูลจากเพลงทั้งหมด 76 เพลงบนเวป


In [198]:
len(all_name)
Out[198]:
76



 

ดึงเนื้อเพลงแต่ละเพลง

เราะจะใช้ for loop เพื่อเข้าไปแต่ละหน้าเวปที่เก็บเนื้อเพลงไว้ และดึงเนื้อเพลงออกมา


In [199]:
all_lyrics = []
for link in all_link:
 data = requests.get(link)
 soup = bs4.BeautifulSoup(data.text)
 text = soup.find('div',{'class':'lyric'}).text
 all_lyrics.append(text)


 

HTML ที่เก็บเนื้อเพลง และเป็นรายละเอียดที่ใช้ในการดึงเนื้อเพลง




 

เนื้อเพลงทั้งหมดของแต่ละเพลง

จะมีสัญลักษณ์อย่าง \n\r ติดมาบ้างเราจะมีวิธีการกรองทีหลัง



In [200]:
all_lyrics
Out[200]:
['\nถามใคร ใครก็บอกให้ถอนตัว ถามใคร ใครก็เตือนให้เรานั้นถอยไป\r\nฝันไกลให้ระวังจะเสียใจ ช่างใคร จะเป็นยังไงก็เป็นกัน\n\r\nถามใจ ใจก็บอกว่าต้องลอง เพราะคนเราต่างมองอะไรไม่เหมือน...

 

เนื้อเพลงทั้งหมดในตาราง

สร้างตารางประเภท DataFrame มาเก็บข้อมูลเอาไว้เพื่อให้เรียกใช้ได้ง่าย


In [201]:
import pandas as pd



 

เตรียมเนื้อเพลงเพื่อใช้วิเคราะห์

เราจะเริ่มการวิเคราะห์ข้อมูลจากเนื้อเพลง โดยการวิเคราะห์เนื้อเพลง คำพูด หรือการใช้ภาษาโดยทั่วไปจะใช้ศาสตร์ที่เรียกว่า NLP หรือ Natural Language Processing ที่เป็นศาสตร์ในการใช้เพื่อทำความเข้าใจภาษาที่เราใช้สื่อสารกัน

สำหรับประเทศไทยเราจะใช้เครื่องมือที่ชื่อว่า pythainlp เป็นเครื่องมือในการจัดการข้อมูล และวิเคราะห์ ที่นักพัฒนาไทยพัฒนาขึ้นเพื่อให้การวิเคราะห์ภาษาไทยง่ายกว่าเดิมมาก (ดูได้จากตัวอย่างในคลิปนี้) เรียนรู้เกี่ยวกับโปรเจคนี้ ได้ที่นี่ และมีผู้สนับสนุนหลักคือ สถาบันวิจัย Vistec-Depa ที่รวบรวมนักวิจัยไทย AI ระดับโลก ระดับโลกจริงๆ คือ มีการแข่งขันงานวิจัย แล้วไทยเราชนะเยอะมาก ถ้าใครยังไม่รู้จักสถาบันนี้ เรียนรู้เพิ่มเติมเบื้องต้น ได้ที่นี่


 

ติดตั้ง/นำเข้าเครื่องมือ


In [203]:
!pip install pythainlp
import pythainlp
Requirement already satisfied: pythainlp in c:\users\acer\anaconda3\lib\site-packages (2.3.1) Requirement already satisfied: python-crfsuite>=0.9.6 in ...



 

เตรียมข้อมูล

เราจะต้องนำเนื้อเพลงทั้งหมดมาต่อกันเป็น string เดียวเพื่อนำเข้าเครื่องมือในการใช้วิเคราะห์


In [205]:
lyrics_text = ''
for t in song_table['lyrics']:
 lyrics_text += t
lyrics_text
Out[205]:
'\nถามใคร ใครก็บอกให้ถอนตัว ถามใคร ใครก็เตือนให้เรานั้นถอยไป\r\nฝันไกลให้ระวังจะเสียใจ ช่างใคร จะเป็นยังไงก็เป็นกัน\n\r\nถามใจ ใจก็บอกว่าต้องลอง เพราะคนเราต่างมองอะไรไม่เหมือน...

 

แยกคำออกจากกัน

ในการแยกคำออกจากเนื้อเพลงถ้าจะทำเองก็คงยาก ซึ่งภาษาไทยมีความยากกว่าภาษาอังกฤษเพราะคำที่ใช้เขียนติดกัน ไม่เหมือนภาษาอังกฤษที่เว้นระยะระหว่างคำไว้เรียบร้อยทำให้จัดการง่ายกว่า

ในการแยกคำเราจะเรียกว่า tokenize ซึ่งเครื่องมือในการ tokenize ถูกสร้างไว้เรียบร้อยสามารถเรียกใช้ได้เลยในคำสั่ง pythainlp.tokenize.word_tokenize() อักษรพิเศษ เช่น '\n' ''\r' เป็นผลมาจากการใช้แสดงผลบนเวป ซึ่งเราจะกรองในขั้นตอนถัดๆไป



In [206]:
lyrics_tokens = pythainlp.tokenize.word_tokenize(lyrics_text)
lyrics_tokens
Out[206]:
['\n',  'ถาม',  'ใคร',  ' ',  'ใคร',  'ก็',  'บอก',  'ให้',  'ถอนตัว',  ' ',  'ถาม',  'ใคร',  ' ',  'ใคร',  'ก็',  'เตือน',  'ให้',  'เรา',  'นั้น',  'ถอย',  ...

 

ต่อ token

เครื่องมือที่เราจะใช้ถัดไปจะต้องนำ token มาต่อกันก่อนจึงจะใช้งานได้ ซึ่งจะเปลี่ยนจากคำแยกๆ เป็นข้อความยาวๆ ที่แบ่งด้วย ช่องว่าง


In [207]:
lyrics_tokens_text = " ".join(lyrics_tokens)
lyrics_tokens_text
Out[207]:
'\n ถาม ใคร   ใคร ก็ บอก ให้ ถอนตัว   ถาม ใคร   ใคร ก็ เตือน ให้ เรา นั้น ถอย ไป \r\n ฝัน ไกล ให้ ระวัง จะ เสียใจ   ช่าง ใคร   จะ เป็น ยังไง ก็ เป็น กัน \n \r\n ถาม ใจ   ใจ ก็ บอ กว่า ต้อง ลอง   เพราะ ...

 

การตั้งค่าที่จะใช้เพิ่มเติม

ตั้งตัวกรอง

กรองคำที่ต้องการด้วย Regular Expression โดยการใช้งานเป็นการสอนให้โค้ดสามารถตรวจจับคำภาษาไทย และกรองตัวอักษรที่ไม่ใช่ออกไปได้ สามารถเรียนรู้เกี่ยวกับ Regular Expression เบื้องต้น ได้ที่นี่


In [208]:
reg = r"[ก-๙a-zA-Z']+"


 

กำหนด Font ที่ใช้แสดงผล

โดยการระบุตำแหน่งไฟล์ Font ที่ใช้ทำงาน เราเตรียมไว้ให้แล้วดาวน์โหลดได้จาก File >> Open แล้วเลือกไฟล์เพื่อดาวน์โหลด


In [209]:
fp = 'Mitr Regular.ttf'



 

เพลง Bodyslam พูดถึงอะไรบ้าง?

เราจะใช้ library wordcloud ที่จะนำคำ ต่างต่างๆ มาสร้างเป็น wordcloud และใช้คำสั่งแสดงผลด้วย library matplotlib โดย wordcloud จะนำคำที่เราเตรียมไว้เข้าไปนับว่าคำไหนมีจำนวนเท่าไร และทำการแสดงผลเป็นขนาดของคำนั้นๆ ยิ่งมีคำนั้นปรากฎอยู่มากตัวอักษรจะยิ่งใหญ่


 

ติดตั้ง/นำเข้าเครื่องมือ



In [19]:
!pip install wordcloud
!pip install matplotlib
from wordcloud import WordCloud
import matplotlib.pyplot as plt
Requirement already satisfied: wordcloud in c:\users\acer\anaconda3\lib\site-packages (1.8.1) Requirement already satisfied: matplotlib in c:\users\acer\anaconda3\lib\site-packages (from wordcloud) (3.2.2) Requirement already satisfied: numpy>=1.6.1 in ...




 

Wordcloud

คำสั่ง wordcloud จะรับค่าต่างๆ ที่แปลงความนิยมของคำที่ใช้เป็นขนาดของคำ และแปลงออกมาเป็นภาพของคำ และมีลักษณะการใช้งานร่วมกับ matplotlib เพื่อให้สามารถแสดงภาพออกมาได้ดังด้านล่าง


In [210]:
wordcloud = WordCloud(background_color = 'white',font_path=fp,max_words=2000, height = 2000, width=4000, regexp=reg)
wordcloud.generate(lyrics_tokens_text)
plt.figure(figsize = (16,8))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()


 

ตัดคำฟุ่มเฟือย

คำหลายคำเป็นคำที่ไม่ได้ใช้สื่อความหมายใดๆ แต่มีในประโยคเพื่อให้ประโยคสวยงามขึ้น ซึ่งคำพวกนี้จะเรียกว่า stop word ของภาษาไทยก็มีเตรียมไว้พร้อมใช้! ซึ่งเราจะนำมาใช้เพื่อตัดออกให้เห็นข้อความที่มีความหมายมากขึ้น


 

นำเข้าเครื่องมือ


In [211]:
from pythainlp.corpus.common import thai_stopwords


 

หน้าตา stop word



In [212]:
ts = list(thai_stopwords())
ts
Out[212]:
['ได้ที่',  'ช่วงที่',  'ใช่',  'เฉยๆ',  'เผื่อที่',  'คราวโน้น',  'จังๆ',  'อย่างน้อย',  'จวน',  'จริง',  'แค่จะ',  'แค่ว่า',  'ความ',  'ง่ายๆ',  'แค่เพียง',  'เขียน',  'คราวใด',  'แต่ว่า',  'ช่วงระหว่าง',  'ทุกครา',  'เพิ่มเติม',  'เสียจนถึง',  'แค่ไหน',  'ครั้งละ',  'เรื่อย',  'เชื่อถือ',  'ด้วยเหตุที่',  'คง',  'เสียก่อน',  'แก่',  'ไฉน',  'จนแม้',  'เกินๆ',  'ช่วงนั้น',  'ถึง...

 

กำหนด stop word ที่จะตัดออก

เราจะกำหนด stop word เข้าไปเพิ่มเพื่อใช้คัดคำที่ไม่ต้องการออก ซึ่งจะได้การแสดงผลคำที่มีความหมายมากขึ้น เนื่องจากคำฟุ่มเฟือย จะประกอบไปด้วยหลายคำที่อาจไม่มีความหมายในตัว แต่มีการใช้งานบ่อย เช่น ที มัน จะ ไม่

คำที่เหลือจากนี้จะเป็นคำที่ค่อนข้างมีความหมายในการสื่อสารมากกว่า มาดูกันว่า Bodyslam พูดถึงอะไรกันบ้าง


In [213]:
wordcloud = WordCloud(stopwords=ts, background_color = 'white',font_path=fp,max_words=2000, height = 2000, width=4000, regexp=reg)
wordcloud.generate(lyrics_tokens_text)
plt.figure(figsize = (16,8))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()


 

ตารางข้อมูลคำ

นอกจาก Wordcloud ที่ใช้ทำความเข้าใจข้อมูลด้วยตาแล้ว เราจะเก็บข้อมูลลงตารางเพื่อนำไปใช้วิเคราะห์เบื้องต้นด้วย


 

เตรียมข้อมูล

นำคำที่ได้มาสร้างเป็น Dictionary เพื่อเตรียมสร้างเป็นตาราง


In [226]:
token_count = {}
for tk in lyrics_tokens:
 token_count[tk] = token_count.get(tk,0) + 1

 

ข้อมูลดิบ

เป็นข้อมูลที่ยังไม่ได้กรองอักษรพิเศษ และคำฟุ่มเฟือยออก สังเกตว่าจะมีกว่า 2000คำ++ ในการใช้งาน ที่เป็นเพียงสัญลักษณ์พิเศษ


In [227]:
token_table = pd.DataFrame([token_count],index=['count']).transpose()
token_table = token_table.sort_values('count',ascending=False).reset_index()
token_table.columns = ['word','count']
token_table

 

คำภาษาไทย

เมื่อนำตัวกรองมาใส่จะเหลือเพียงคำภาษาไทยเท่านั้น ซึ่งมีอยู่ 1658 คำที่ไม่ซ้ำกัน และมีการใช้จำนวนคำทั้งหมด 19228 ร้อยเรียงเป็นเพลงต่างๆ


In [228]:
word_table = token_table[token_table['word'].str.contains(reg)]
word_table
In [229]:
word_table.sum(axis=0
Out[229]:
word     ไม่จะที่เธอฉันมียังก็มันให้ไปได้เป็นรักใครคนแค... count                                                19228 dtype: object


 

คำที่กรองคำฟุ่มเฟือยออก

เมื่อนำคำฟุ่มเฟือยออกจะเหลือ 1342 คำที่ไม่ซ้ำกัน และ 7482 จำนวนคำที่ไม่รวมคำฟุ่มเฟือย


In [230]:
result_table = word_table[~word_table['word'].isin(ts)]
result_table

In [231]:
result_table.sum(axis=0)
Out[231]:
word     รักคนชีวิตรู้ใจหัวใจฝันทำฟ้าสักดีวันที่โลกสุดท... count                                                 7482 dtype: object



 

หาคำ 2 พยางค์

เราจะนำผลการนับไปประกอบกับคำที่ได้มาอยู่ก่อนเป็นตารางแสดงผลการนับพยางค์ ก่อนที่จะนำข้อมูลไปกรองหาแค่คำที่มี 2 พยางค์


 

นำเข้าเครื่องมือ


In [232]:
from pythainlp.tokenize import syllable_tokenize


 

คำทั้งหมด


In [233]:
lyrics_tokens
Out[233]:
['\n',  'ถาม',  'ใคร',  ' ',  'ใคร',  'ก็',  'บอก',  'ให้',  'ถอนตัว',  ' ',  'ถาม',  'ใคร',  ' ',  'ใคร',  'ก็',  'เตือน',  'ให้',  'เรา',  'นั้น',  'ถอย',  'ไป',  '\r\n',  'ฝัน',  'ไกล',  'ให้',  'ระวัง',  'จะ',  'เสียใจ',  ' ',  'ช่าง',  'ใคร',  ' ',  'จะ',  'เป็น',  'ยังไง',  'ก็',  'เป็น',  'กัน',  '\n',  '\r\n',  'ถาม',  'ใจ',  ' ',  'ใจ',  'ก็',  'บอ',  'กว่า',  'ต้อง',...

 

นับจำนวนพยางค์


In [234]:
token_syllable = []
for w in lyrics_tokens:
 token_syllable.append(len(syllable_tokenize(w)))
token_syllable
Out[234]:
[1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  2,  1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  2,  1,  2,  1,  2,  1,  2,  1,  2,  1,  2,  1,  1,  1,  2,  1,  2,  1,...

 

คำที่มี 2 พยางค์

เราจะใช้คำทั้งหมดก่อนการกรองใดๆ เพื่อใส่เข้าไปแสดงผล wordcloud ลักษณะเดียวกับก่อนหน้านี้ แต่จะทำการกรองให้เหลือเฉพาะคำที่มี 2 พยางค์ก่อน


In [235]:
syllable_table = pd.DataFrame([lyrics_tokens,token_syllable],index=['word','syllable']).transpose()
syllable_2_table = syllable_table[syllable_table['syllable']==2]
syllable_2_table

 

ข้อมูลที่จะนำใส่ Wordcloud


In [236]:
syllable_2_text = " ".join(list(syllable_2_table['word'].values))
syllable_2_text
Out[236]:
'ถอนตัว ระวัง เสียใจ ยังไง คนเรา อะไร เหมือนกัน หัวใจ ต่างหาก สำคัญ ช่างมัน อะไร เป็นไป ยับเยิน บาดเจ็บ เท่าไร ยืนยัน นี่แหละ ชีวิต ต้องการ ต่อให้ เดิมพัน ความฝัน ตัวเรา หนทาง ยังไง สักที ก็ดี มั่นใจ อะไร เป็นไป นี่แหละ ชีวิต ต้องการ ต่อให้ เดิมพัน ความฝัน เต็มใจ นี่แหละ ชีวิต ต้องการ ต่อให้ เดิมพัน ...

 

คำที่มี 2 พยางค์

เราจะนำทุกคำในเนื้อเพลงที่เป็น 2 พยางค์มาใส่ wordclound


In [237]:
wordcloud = WordCloud(stopwords=ts, background_color = 'white',font_path=fp,max_words=2000, height = 2000, width=4000, regexp=reg)
wordcloud.generate(syllable_2_text)
plt.figure(figsize = (16,8))
plt.imshow(wordcloud)
plt.axis('off')
plt.show()

 

นับพยางค์ตารางคำ

เรามาอัพเดทตารางที่เก็บคำไม่ซ้ำให้นำข้อมูลจำนวนพยางค์ใส่ลงไปด้วย


In [238]:
syllable_count = [len(syllable_tokenize(w)) for w in u_table['word'].values]
result_table = result_table.assign(syllable=syllable_count)
result_table[result_table['syllable']==2]



 

แยกประเภทของคำ

เราจะมาติด tag คำกันว่าคำที่มีอยู่คำไหนเป็นคำนาม กริยา เพื่อหา insight ของคำ

นำเข้าเครื่องมือ


In [239]:
from pythainlp.tag import pos_tag, pos_tag_sents


 

tag คำ



In [242]:
all_words = result_table['word']
tag_tuple = pos_tag(list(all_words.values), corpus="orchid_ud")
tag_table = pd.DataFrame(tag_tuple,columns=['word','tag'])
tag_table

 

ใส่ประเภทคำในตาราง

อัพเดทตารางข้อมูลคำ


In [243]:
result_table = pd.merge(result_table,tag_table,on='word')
In [244]:
result_table


 

คำเหล่านี้อยู่ในกี่เพลงของ Bodyslam?

ตอนนี้เรามีข้อมูลเกี่ยวกับคำเบื้องต้น และความถี่ในการใช้งาน เดี๋ยวมาดูว่าคำเหล่านี้อยู่ในกี่เพลงของ Bodyslam โดยการนำคำมาเทียบกับเนื้อเพลงตอนแรก


In [245]:
song_count = []
for result_word in result_table['word']:
 s_count = 0
 for i,row in song_table.iterrows():
 if result_word in row['lyrics']:
 s_count += 1
 song_count.append(c)
In [247]:
result_table = result_table.assign(songs=count)
In [248]:
result_table.sort_values(by='songs',ascending=False)

 

กรองคำที่ไม่อยากได้

การทำงานของโค้ดอาจมีการผิดพลาดบ้างเนื่องจากความยากทางด้านเทคนิคที่จะทำให้ถูกต้อง 100% ในทุกครั้ง (แทบเป็นไปไม่ได้) การใช้งานอาจจะต้องมีการคำนึงถึงข้อผิดพลาด และการแก้ไขปัญหาเฉพาะหน้า

ในการดูคำที่ใช้บ่อย เราจะกรองคำที่เจอ 1-2 ครั้งออก

คำว่าใจอยู่ในเพลงจำนวนมากที่สุด!!


In [250]:
result_table[result_table['count'] > 2].sort_values(by='songs',ascending=False)

 

เพลงเดียวบนเวปที่ไม่มีคำว่าใจ คือ....

เพลงผักบุ้งลอยฟ้า ไม่เชื่อลองเปิดเนื้อเพลงดูสิ!!


In [182]:
table[~test.str.contains('ใจ')]

 

เนื้อหาวันนี้จัดทำเพื่อร่วมแสดงความยินดีกับพ่อตูน แม่ก้อย

ไม่ได้มีเจตนาร้ายใดๆ และไม่มีความตั้งใจให้เกิดผลด้านลบใดๆ ผมเองเติบโตมากับเพลง Bodyslam ที่วันนี้เราได้เห็นแล้วว่าเนื้อหาของวงนี้ค่อนข้างแตกต่างจากวง Rock ในยุคนั้น วง Bodyslam เป็นวงที่พูดถึงการเดินทาง ชีวิต ความฝัน ผมเชื่อว่าคนไทย หรือใครก็ตามที่เป็นแฟนเพลง Bodyslam ก็ได้รับแรงบันดาลใจในการสู้ชีวิตไม่ต่างกัน!

ข้อมูลนี้สามารถดูได้บน spreadsheet ด้วย ดูที่นี่


 

ติดตามการใช้ Python ทำสิ่งรอบตัวทาง Facebook Youtube

เรียนรู้เกี่ยวกับ Bootcamp ปูพื้นฐานเดียวที่ดูแลคุณ "ตัวต่อตัว" www.ultimatepython.co/live







1,567 views0 comments

Comments


bottom of page