Tuesday 20 March 2018

Filled Under: , ,

Sentiment Analysis pada Facebook Graph API menggunakan bahasa Python

Goals : 
  • Melakukan scrapping pada komentar post pada Facebook menggunakan Facebook Graph API, dan mengadaptasi script Python untuk mengumpulkan komentar menjadi sebuah text file.
  • Simple natural language processing menggunakan NLTK dan VADER untuk mengklasifikasi komentar ke dalam bentuk positif/negatif/netral
Part 1 : Scrapping
Pertama kita membutuhkan akun facebook untuk mengakses Graph API Explorer pada link berikut https://developers.facebook.com/tools/explorer/


Klik “Get Token” pada bagian pojok kanan, pilih opsi “Get User Access Token”. Selanjutnya kamu akan diarahkan ke sebuah dialog yang besar beserta pilihan-pilihan, lewati saja dan klik "Get Access Token" dibawah pojok kanan, dan seketika Access Token kamu akan terisi pada kolom Access Token. Langkah Selanjutnya akan dibahas dibawah. 

Downloading The Comment 

Untuk mengambil data dari suatu post facebook, pertama kita scraping suatu post tersebut dengan kodingan dibawah ini :

import requests

graph_api_version = 'v2.9'
# paste your access token below
access_token = 'ACCESS_TOKEN'

# LHL's Facebook user id
user_id = '173567062703xxx'
# the id of LHL's response post
post_id = '1724109067649xxx'
# the graph API endpoint for comments on LHL's post
url = 'https://graph.facebook.com/{}/{}_{}/comments'.format(graph_api_version, user_id, post_id)

comments = []

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'.format(len(data['data'])))
    if 'paging' in data and 'next' in data['paging']:
        r = requests.get(data['paging']['next'])
    else:
        break

#menyimpan komentar ke dalam suatu file
with open('comments.txt', 'w', encoding='utf-8') as f:
    for comment in comments:
        f.write(comment + '\n')

import library requests digunakan agar mendapatkan akses token dari facebook. Post ID dan User ID sangat dibutuhkan dalam melakukan proses Scrapping. Setelah itu untuk mengambil semua komentar di dalam suatu post tersebut membuat array dengan nama comments dan menggunakan library requests untuk mendapatkan akses token, untuk dibuat scraping atau data komentar dari suatu post dibuat kondisi terdapat error dalam data JSON tersebut maka ditampilkan pesan error, jika tidak maka dimuat isi array dengan banyak nya komentar menggunakan perintah. 

Kemudian untuk data comment yang sudah di extract disimpan dalam file bernama comments.txt dan output yang dhasilkan dari script python diatas berupa :


Part 2 : Sentiment Analysis
Hal pertama yang harus dilakukan adalah mengimport beberapa library berikut seperti NLTK, pandas

import nltk
import pandas as pd
import string

library yang digunakan yaitu vader lexicon untuk pemanggilan fungsi SentimentIntensityAnalyzer

from nltk.sentiment.vader import SentimentIntensityAnalyzer
sid = SentimentIntensityAnalyzer()

Print Positive, Negative, Neutral
summary = {"positive":0,"neutral":0,"negative":0}
for x in messages:
    ss = sid.polarity_scores(x)
    if ss["compound"] == 0.0:
        summary["neutral"] +=1
    elif ss["compound"] > 0.0:
        summary["positive"] +=1
    else:
        summary["negative"] +=1
print(summary)
untuk penentuan suatu komentar termasuk komentar positif dibuat kondisi jika nilai variabel ss yang merupakan perhitungan pada library SentimentIntensityAnalyzer Setelah import library sentiment analyzer dari NLTK !

Output akhir dari hasil sentiment analysis ini adalah

Groups :
A. A. Gde A. Aditya Pratama
Alfonsius Krisnanda
David Cornelius
Harapan Daeli

3 comments

apakah ada scrapping untuk memgambil data komentar di suatu postingan orang lain di instagram?

Kalau untuk ekstraksi data postingan dalam jumlah besar kira2 gimana ya ?

Kalo mau belajar dimana ya bang?

Silahkan berkomentar dengan damai tanpa menyimpang dari topik And Please DON'T SPAM!!