Sentiment Analyst pada graph facebook menggunakan Python3, NLTK Analisa sentiment Vader dan visualisasi menggunakan matplotlib.
Tugas Deep Learning
4IA01
Andika Demas Riyandi (51414067)
Denny Aditya Pradipta (52414708)
Muhammad Andika Nugraha (57414084)
Rendytio Arifian Puspito (59414055)
Opinion Mining / Sentiment Analysis (sebagian besar researcher menganggap dua istilah ini sama/interchangeable) merupakan sebuah cabang penelitian di domain Text Mining yang mulai booming pada awal tahun 2002-an. Riset-nya mulai marak semenjak paper dari B.Pang dan L.Lee [1] keluar. Secara umum, Sentiment analysis ini dibagi menjadi 2 kategori besar :
- Coarse-grained sentiment analysis
- Fined-grained sentiment analysis
Coarse-grained sentiment analysis - kita mencoba melakukan proses analysis pada level Dokumen. Singkatnya adalah kita mencoba mengklasifikasikan orientasi sebuah dokumen secara keseluruhan. Orientasi ini ada 3 jenih : Positif, Netral, Negatif. Akan tetapi, ada juga yang menjadikan nilai orientasi ini bersifat kontinu / tidak diskrit.
Fined-grained sentiment analysis - kategori kedua ini yang sedang Naik Daun sekarang. Maksudnya adalah para researcher sebagian besar fokus pada jenis ini. Obyek yang ingin diklasifikasi bukan berada pada level dokumen melainkan sebuah kalimat pada suatu dokumen.
contoh :
- Saya tidak suka programming. (negatif)
- Hotel yang baru saja dikunjungi sangat indah sekali. (positif)
Graph facebook merupakan API yang disediakan oleh Facebook. Untuk dapat menggunakan Graph facebook diperlukan akun facebook guna mendapatkan Token API.
Untuk mendapatkan token dapat mengunjungi https://developers.facebook.com/tools-and-support/ lalu pilih “Penjelajahan API Graf” kemudian pilih dapatkan token dan centang service yang diperlukan
Kemudian klik “Dapatkan token” dan lakukan Authenticate maka anda akan segera mendapatkan Token API
Gambar di atas merupakan Akses Token yang nantinya dapat digunakan pada code yang akan dibuat.
Disini kami akan melakukan Analisa pada halaman Facebook Eddie Griffin. Berikut adalah post yang akan kami Analisa.
https://www.facebook.com/EddieGriffinOfficial/posts/10155290098795967
Sebelumnya kita akan mengambil semua komentar pada post tersebut, maka kami akan mencobanya terlebih dahulu pada Graph facebook. Dengan versi 2.12. dengan code graph sebagai berikut.
Method GET -> /v2.12/ EddieGriffinOfficial untuk mengetahui ID dari halaman tersebut.
Gambar di atas merupakan Id dari halaman yang kita inginkan sedangkan Id post yang akan kita Analisa adalah 10155290098795967. Maka untuk mendapatkan semua komentar dari post tersebut kita dapat menggunakan
GET ->/v2.12/73107530966_10155290098795967/comments
Maka akan di dapatkan output sebagai berikut
Pada gambar di atas terdapat 407 komentar yang akan kami Analisa. Setelah itu kita akan menggunakan Bahasa Python untuk mengambil semua data tersebut yang selanjutnya akan dibuatkan file dalam bentuk .txt untuk di Analisa.
Berikut adalah code untuk melakukan pengambilan data atau disebut dengan data Scrapping.
import requests
import signal
import sys
graph_api_version = 'v2.12'
access_token = 'ISI DENGAN AKSES TOKEN'
user_id = '73107530966'
post_id = '10155290098795967'
url = 'https://graph.facebook.com/{}/{}_{}/comments'.format(graph_api_version, user_id, post_id)
comments = []
limit = 0
def write_comments_to_file(filename):
print()
if len(comments) == 0:
print('No comments to write.')
return
with open(filename, 'w', encoding='utf-8') as f:
for comment in comments:
f.write(comment + '\n')
print('Wrote {} comments to {}'.format(len(comments), filename))
def signal_handler(signal, frame):
print('KeyboardInterrupt')
write_comments_to_file('comments.txt')
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
r = requests.get(url, params={'access_token': access_token})
while True:
data = r.json()
if 'error' in data:
raise Exception(data['error']['message'])
for comment in data['data']:
text = comment['message'].replace('\n', ' ')
comments.append(text)
print('Got {} comments, total: {}'.format(len(data['data']), len(comments)))
if 0 < limit <= len(comments):
break
if 'paging' in data and 'next' in data['paging']:
r = requests.get(data['paging']['next'])
else:
break
write_comments_to_file('comments.txt')
|
Pada kode di atas coment dalam bentuk graf akan disimpan dalam bentuk .txt
Gambar di atas merupakan proses dari scrapping data, dan berikut adalah output dari data yang tealh di ambil dalam bentuk .txt
Data yang akan dilakukan Analisa sudah tersedia maka selanjutnya akan dilakukan Analisa sentimental menggunakan Natural Language Toolkit atau NLTK dengan metode Analisa sentiment Vander. Yang mana data tersbut akan di export ke dalam bentuk xls dengan menggunakan library xlsxwriter dan dilakukan visualisasi data dalam bentuk pie chart menggunakan Matplotlib. Berikut adalah code untuk melakukan sentiment analis
import nltk
import string
import xlsxwriter
import matplotlib.pyplot as plt
messages = [line.rstrip() for line in open("comments.txt",encoding="utf8")]
from nltk.sentiment.vader import SentimentIntensityAnalyzer
sid = SentimentIntensityAnalyzer()
summary = {"positive":0,"neutral":0,"negative":0}
data_and_result = []
for x in messages:
ss = sid.polarity_scores(x)
if ss["compound"] == 0.0:
summary["neutral"] +=1
data_x_result = [x,'neutral']
elif ss["compound"] > 0.0:
summary["positive"] +=1
data_x_result = [x,'positive']
else:
summary["negative"] +=1
data_x_result = [x,'negative']
data_and_result.append(data_x_result)
print(summary)
# plot
labels = 'Positive', 'Neutral', 'Negative'
sizes = [summary["positive"], summary["neutral"], summary["negative"]]
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, autopct='%1.1f%%',
startangle=90)
ax1.axis('equal')
plt.show()
workbook = xlsxwriter.Workbook('Analisa.xlsx')
worksheet = workbook.add_worksheet()
row = 0
col = 0
for data, result in (data_and_result):
worksheet.write(row, col, data)
worksheet.write(row, col + 1, result)
row += 1
workbook.close()
|
Gambar di atas merupakan visualisasi dari comtar yang telah dilakukan Analisa sentiment, berikut adalh hasil dalam bentuk xls yang sudah dilakukan Analisa.
Comments
Post a Comment