• Tidak ada hasil yang ditemukan

Analisis Sentimen terhadap Opini Publik Melalui Jejaring Sosial Twitter Menggunakan Metode Naïve Bayes.

N/A
N/A
Protected

Academic year: 2017

Membagikan "Analisis Sentimen terhadap Opini Publik Melalui Jejaring Sosial Twitter Menggunakan Metode Naïve Bayes."

Copied!
36
0
0

Teks penuh

(1)

iv Universitas Kristen Maranatha

ANALISIS SENTIMEN TERHADAP OPINI PUBLIK MELALUI JEJARING

SOSIAL TWITTER MENGGUNAKAN METODE NAIVE BAYES

Alfarizy M. G. (0927050)

Jurusan Sistem Komputer, Fakultas Teknik,

Universitas Kristen Maranatha

Jalan Prof. Drg. Suria Sumantri MPH No. 65

Bandung 40164

ABSTRAK

Manusia adalah makhluk sosial dan mereka berkomunikasi satu sama lain. Saat ini, orang banyak berinteraksi menggunakan media sosial salah satunya Twitter. Bahkan Presiden Indonesia menggunakan Twitter untuk mengungkapkan perasaan, sentimen, dan ide menurut aspek yang berbeda setiap hari. Banyak tokoh politik menggunakan Twitter di Indonesia seperti Gubernur DKI Jakarta Basuki Tjahaja Purnama (Ahok) dengan basuki_btp sebagai username-nya.

(2)

SENTIMENT ANALYSIS TO PUBLIC FIGURE BY SOCIAL MEDIA TWITTER USING NAIVE BAYES METHODE

Alfarizy M. G. (0927050)

Jurusan Sistem Komputer, Fakultas Teknik,

Universitas Kristen Maranatha

Jalan Prof. Drg. Suria Sumantri MPH No. 65

Bandung 40164

ABSTRACT

Humans are social beings and they loved to communicate with each other. Nowadays

people interact using social media such as Twitter. Even Indonesian president used

Twitter to express their feelings, sentiments, and idea of different aspects everyday. Many

political figures in Indonesia used Twitter such as Governor of DKI Jakarta Basuki

Tjahaja Purnama (Ahok) with @basuki_btp as his username.

Ahok is a controversial political figure with his style to lead Jakarta. He often express

his feelings passionately even more angry. This research can determined sentiment of

people to Ahok. This research used three class of sentiment: positive, negative, and

netral. Naive bayes algorithm can classify sentiment of people to Ahok. This cleansing,

(3)

viii Universitas Kristen Maranatha

DAFTAR ISI

LEMBAR PENGESAHAN ... i

PERNYATAAN ORISINALITAS LAPORAN TUGAS AKHIR... v

PERNYATAAN PUBLIKASI LAPORAN TUGAS AKHIR ... i

ABSTRAK ... vi

ABSTRACT ... viii

KATA PENGANTAR ... vi

DAFTAR GAMBAR ... xii

DAFTAR TABEL ... xiv

DAFTAR ISI ... viii

BAB I PENDAHULUAN ... 1

1.1 Latar Belakang ... 1

1.2 Identifikasi masalah ... 3

1.3 Tujuan ... 3

1.4 Pembatasan Masalah ... 3

1.5 Sistematika Penulisan ... 4

BAB II LANDASAN TEORI ... 6

2.1 Analisis Sentimen ... 6

2.2 Text Mining ... 8

2.2.1 Text Preprocessing ... 8

2.2.2 Pemilihan Fitur ... 8

2.3 Twitter ... 11

(4)

2.5 Algoritma Naive Bayes ... 17

2.6 Flowchart (Diagram Alir) ... 17

2.7 Database MySQL ... 17

2.7.1 SQLyog ... 21

2.8 Pemrograman Java ... 22

2.8.1 Kelebihan Pemrograman Java ... 23

2.8.2 Kekurangan Pemrograman Java ... 25

2.8.3 Konsep Pemrograman Berorientasi Objek ... 26

2.8.3.1 Abstraksi ... 26

2.8.3.2 Pembungkusan ... 27

2.8.3.3 Pewarisan ... 27

2.8.3.4 Polimorfisme ... 28

2.9 Regex ... 28

2.9 NetBeans ... 29

BAB III PERANCANGAN ... 31

3.1 Perancangan Database ... 31

3.1.1 Tabel TWEETMASTER ... 32

3.1.2 Tabel TWEETNGRAM ... 32

3.1.3 Tabel STOPLIST ... 33

3.1.4 Tabel SENTIMEN ... 34

3.1.5 Tabel PROBABILITAS ... 34

3.1.6 Tabel INTISARI ... 35

3.2 Data Tweet ... 36

3.3 Pengambilan Data dari Twitter... 37

(5)

x Universitas Kristen Maranatha

3.5 Pemilihan Fitur ... 48

3.6 Pembobotan ... 52

3.6 Contoh Penerapan Metode Naive Bayes Classifier ... 54

BAB IV PENGUJIAN ... 59

4.1 Spesifikasi Hardware dan Software yang Digunakan ... 59

4.2 Database ... 60

4.2.1 Tabel TWEETMASTER ... 60

4.2.2 Tabel TWEETNGRAM ... 61

4.2.3 Tabel PROBABILITAS ... 62

4.2.4 Tabel INTISARI ... 63

4.2.5 Tabel STOPLIST ... 64

4.2.6 Tabel SENTIMEN ... 66

4.3 Implementasi Sistem ... 66

4.3.1 Taampilan Tweet Ngram ... 67

4.3.2 Tampilan Hasil Pemilihan Fitur & Perhitungan Probabilitas ... 68

4.3.3 Tampilan Perhitungan Probabilitas Tertinggi ... 69

4.3.4 Tampilan Data Training ... 70

4.3.5 Tampilan Kumpulan Stopword ... 71

4.4 Hasil Akhir Klasifikasi ... 72

BAB V KESIMPULAN & SARAN ... 74

5.1 Kesimpulan ... 74

5.2 Saran ... 74

(6)
(7)

xii Universitas Kristen Maranatha

DAFTAR GAMBAR

Gambar 2.1 Logo Twitter ... 11

Gambar 2.2 Logo SQLyog ... 21

Gambar 2.3 Tampilan SQLyog ... 22

Gambar 2.4 Logo Java ... 23

Gambar 2.5 Logo NetBeans ... 29

Gambar 3.1 Relasi antar tabel ... 31

Gambar 3.2 Skema pengambilan tweet ... 37

Gambar 3.3 Halaman Application Management ... 38

Gambar 3.4 Keys and access tokens ... 39

Gambar 3.5 Consumer keys and secret ... 40

Gambar 3.6 Access tokens and secret ... 40

Gambar 3.7 Implementasi pengambilan data dari Twitter ... 41

Gambar 3.8 flowchart penelitian ... 44

Gambar 3.9 Flowchart Text Preprocessing ... 46

Gambar 3.10 Contoh kalimat yang akan di input ... 47

Gambar 3.11 Kalimat setelah melalui tahap cleansing ... 47

Gambar 3.12 Kalimat setelah melalui tahap case folding ... 47

Gambar 3.13 Implementasi text preprocessing menggunakan REGEX ... 48

Gambar 3.14 flowchart pemilihan fitur stopping ... 50

Gambar 3.15 Hitung P(xi|Vj) ... 54

Gambar 4.1 Tabel TWEETMASTER ... 61

Gambar 4.2 Tabel TWEETNGRAM ... 62

Gambar 4.3 Tabel PROBABILITAS ... 63

Gambar 4.4 Tabel INTISARI ... 64

Gambar 4.5 Tabel STOPLIST ... 65

Gambar 4.6 Tabel SENTIMEN ... 66

Gambar 4.7 Menjalankan program ... 67

Gambar 4.8 Tampilan tweet ngram ... 68

(8)

Gambar 4.10 Tampilah VMAP ... 70

Gambar 4.11 Tampilan data training ... 71

Gambar 4.12 Tampilan kumpulan stopword ... 72

(9)

xiv Universitas Kristen Maranatha

DAFTAR TABEL

Tabel 2.1 Contoh pemotongan n-gram berbasis kata ... 10

Tabel 2.2 Simbol-simbol flowchart ... 17

Tabel 2.3 Simbol-simbol flowchart (lanjutan) ... 18

Tabel 3.1 Field pada tabel TWEETMASTER ... 32

Tabel 3.2 Field pada tabel TWEETNGRAM ... 33

Tabel 3.3 Field pada tabel STOPLIST ... 34

Tabel 3.4 Field pada tabel SENTIMEN ... 34

Tabel 3.5 Field pada tabel PROBABILITAS ... 35

Tabel 3.6 Field pada tabel INTISARI ... 36

Tabel 3.7 Hasil dari text preprocessing ... 48

Tabel 3.8 Hasil dari pemilihan fitur stopping ... 51

Tabel 3.9 Kumpulan stopword ... 51

Tabel 3.10 Hasil pemilihan fitur ... 52

Tabel 3.11 Tabel SENTIMEN ... 53

Tabel 3.12 Contoh perhitungan nilai probabilitas ... 55

Tabel 3.13 Nilai probabilitas kata ... 56

Tabel 3.14 Isi tabel PROBABILITAS ... 56

Tabel 3.15 Isi tabel INTISARI ... 57

(10)

LAMPIRAN A

Lampiran ini berisi coding main class yang diberi nama ClassLatihan.java. Bagian ini adalah bagian utama. Ini adalah kelas utama yang menjalankan program pada penelitian ini.

package packageLatihan;

import com.mycompany.mavenproject1.NgramTest; import java.util.Iterator;

import java.util.List;

import java.util.logging.Level; import java.util.logging.Logger; import model.Probabilitas; import twitter4j.Query; import twitter4j.QueryResult; import twitter4j.Status; import twitter4j.Twitter;

import twitter4j.TwitterException; import twitter4j.TwitterFactory;

import twitter4j.conf.ConfigurationBuilder;

/** *

* @author alzygumgum */

public class ClassLatihan {

public static void main(String[] args) { try {

(11)
(12)

System.out.println(line); System.out.println(pure);

int id_tweet = proses.insertTweet(status.getUser().getScreenName(), pure); Iterator it = ngramResult.iterator();

if (id_tweet != -1) { while (it.hasNext()) {

proses.insertNgrams(id_tweet, (String) it.next()); }

}

proses.pindahNgram();

List<Probabilitas> t = proses.selectProbabilitas(); proses.updateSentimen(t);

List<Integer> i = proses.getTweet(); proses.hitungProbabilitas(i);

proses.intisari();

proses.updateTweetMaster(); status.getText());

}

} catch (TwitterException ex) {

Logger.getLogger(ClassLatihan.class.getName()).log(Level.SEVERE, null, ex); }

(13)

4

LAMPIRAN B

Lampiran ini berisi class yang membuat koneksi antara java dan database MySQL. Class ini diberi nama “ConnectDatabaseClass.java”.

package packageLatihan;

import static com.mycompany.mavenproject1.NgramTest.concat; import com.mysql.jdbc.Statement;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet;

import java.sql.SQLException; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List;

import java.util.logging.Level; import java.util.logging.Logger; import model.Probabilitas; /**

*

* @author alzygumgum */

public class ConnectDatabaseClass {

Connection connections;

public void closeConnection() { try {

(14)

connections = null;

} catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

} }

public Connection getConnection() { if(connections == null){

createConnection(); }

return connections; }

public void createConnection() { String dbUrl =

"jdbc:mysql://localhost/anasentimen?useUnicode=true&amp;characterEncoding=UTF-8"; String dbClass = "com.mysql.jdbc.Driver";

String query = "Select distinct(word) from INFORMATION_SCHEMA.TABLES"; String username = "root";

String password = "sayagaktau"; try {

Class.forName(dbClass); if(connections == null){

connections = DriverManager.getConnection(dbUrl, username, password);

}

} catch (Exception e) { }

(15)

6

LAMPIRAN C

Lampiran ini berisi class yang mengeksekusi dokumen tweet dengan fitur n-gram. Class ini memisahkan kalimat menjadi kata-per-kata. Class ini diberi nama

“NgramTest.java”.

package com.mycompany.mavenproject1;

import java.util.ArrayList; import java.util.List; /**

*

* @author alzygumgum */

public class NgramTest {

public static List<String> ngrams(int n, String str) { List<String> ngrams = new ArrayList<>(); String[] words = str.split(" ");

for (int i = 0; i < words.length - n + 1; i++) ngrams.add(concat(words, i, i+n)); return ngrams;

}

public static String concat(String[] words, int start, int end) { StringBuilder sb = new StringBuilder();

for (int i = start; i < end; i++)

sb.append(i > start ? " " : "").append(words[i]); return sb.toString();

(16)

LAMPIRAN D

Lampiran ini berisi class yang berisi proses text preprocessing sampai kepada perhitungan Algoritma Naive Bayes Classifier. Class ini diberi nama “ProsesClass.java”.

package packageLatihan;

import com.mysql.jdbc.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet;

import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List;

import java.util.logging.Level; import java.util.logging.Logger; import model.Probabilitas;

/** *

* @author alzygumgum */

public class ProsesClass {

public int insertTweet(String user, String tweet) { try {

ConnectDatabaseClass db = new ConnectDatabaseClass(); Connection connections = db.getConnection();

(17)

8

= connections.prepareStatement("INSERT into tweetmaster (user, tweet) VALUES (?,?)",

Statement.RETURN_GENERATED_KEYS); preparedStatement.setString(1, user);

preparedStatement.setString(2, tweet);

preparedStatement.executeUpdate();

ResultSet tableKeys = preparedStatement.getGeneratedKeys(); tableKeys.next();

int autoGeneratedID = tableKeys.getInt(1); db.closeConnection();

return autoGeneratedID; } catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

}

return -1;//error }

public int insertNgrams(int id_tweet, String tweet) { try {

ConnectDatabaseClass db = new ConnectDatabaseClass(); Connection connections = db.getConnection();

PreparedStatement preparedStatement

= connections.prepareStatement("INSERT into tweetngram (id_tweet, ngram) VALUES (?,?)",

Statement.RETURN_GENERATED_KEYS); preparedStatement.setInt(1, id_tweet);

(18)

preparedStatement.executeUpdate();

ResultSet tableKeys = preparedStatement.getGeneratedKeys(); tableKeys.next();

int autoGeneratedID = tableKeys.getInt(1); db.closeConnection();

return autoGeneratedID; } catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

}

return -1;//error }

public void deleteData() { try {

ConnectDatabaseClass db = new ConnectDatabaseClass(); Connection connections = db.getConnection();

String SQL = "DELETE FROM probabilitas"; PreparedStatement pstmt1 = null;

pstmt1 = connections.prepareStatement(SQL); pstmt1.executeUpdate();

SQL = "DELETE FROM tweetngram"; PreparedStatement pstmt = null;

pstmt = connections.prepareStatement(SQL); pstmt.executeUpdate();

SQL = "DELETE FROM tweetmaster"; pstmt = null;

(19)

10 pstmt.executeUpdate();

db.closeConnection(); } catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

} }

public List<String> stopWord() {

List<String> stpwrd = new ArrayList<>(); try {

ConnectDatabaseClass db = new ConnectDatabaseClass(); Connection connections = db.getConnection();

String SQL = "SELECT stopword FROM stoplist"; PreparedStatement pstmt = null;

pstmt = connections.prepareStatement(SQL); ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

String stopword = rs.getString("stopword"); stpwrd.add(stopword);

}

db.closeConnection(); } catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

}

return stpwrd; }

(20)

List<Integer> tweet = new ArrayList<>();

(21)
(22)

pstmt5.setInt(2, id_prob);

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

} }

public void hitungProbabilitas(List<Integer> idtweet) { try {

(23)

14 Iterator it = idtweet.iterator();

while (it.hasNext()) {

String SQL = "SELECT * FROM probabilitas a join tweetngram b on(a.id_ngram = b.id_ngram) join tweetmaster c on(b.id_tweet = c.id_tweet) where c.id_tweet=?";

(24)

db1.closeConnection();

SQL = "SELECT SUM(qty) as vocab FROM probabilitas a JOIN tweetngram b ON(a.id_ngram = b.id_ngram) JOIN tweetmaster c ON(b.id_tweet = c.id_tweet) WHERE c.id_tweet = ? ";

PreparedStatement pstmt3 = null;

ConnectDatabaseClass db2 = new ConnectDatabaseClass(); Connection con2 = db2.getConnection();

pstmt3 = con2.prepareStatement(SQL); pstmt3.setInt(1, id_tweet);

ResultSet rs3 = pstmt3.executeQuery(); int vocab = 0;

while (rs3.next()) {

vocab = rs3.getInt("vocab"); }

db2.closeConnection();

float up = (nk + 1); float down = (n + vocab); float hasil = up / down;

SQL = "UPDATE probabilitas set prob = ? where id_prob = ? and id_ngram = ?";

PreparedStatement pstmt4 = null;

ConnectDatabaseClass db3 = new ConnectDatabaseClass(); Connection con3 = db3.getConnection();

pstmt4 = con3.prepareStatement(SQL); pstmt4.setFloat(1, hasil);

(25)

16 db3.closeConnection();

} }

b.id_ngram) join tweetmaster c on(b.id_tweet = c.id_tweet) " db.closeConnection();

} catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

}

}

(26)

probs.setNgram(ngram); probs.setQty(qty);

probs.setSentimen(sentimen); probs.setProb(prob);

selProbs.add(probs); }

db.closeConnection(); } catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

}

return selProbs; }

public void updateSentimen(List<Probabilitas> t) {

try {

ConnectDatabaseClass db = new ConnectDatabaseClass(); Connection connections = db.getConnection();

Iterator it = t.iterator();

while (it.hasNext()) {

String SQL = "SELECT * FROM sentimen where kata = ?"; PreparedStatement pstmt = null;

pstmt = connections.prepareStatement(SQL); Probabilitas o = (Probabilitas) it.next(); pstmt.setString(1, o.getNgram()); ResultSet rs = pstmt.executeQuery(); String sentimen = "netral";

(27)

18

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex); probabilitas a JOIN tweetngram b ON (a.id_ngram = b.id_ngram) JOIN tweetmaster c ON (b.id_tweet = c.id_tweet) GROUP BY c.id_tweet, a.sentimen";

(28)

float prob = rs.getFloat("total_prob");

SQL = "INSERT INTO intisari (id_tweet, sentimen, prob) VALUES (?, ?, ?)"; ConnectDatabaseClass db2 = new ConnectDatabaseClass();

Connection con = db2.getConnection(); pstmt = con.prepareStatement(SQL); pstmt.setInt(1, id_tweet);

pstmt.setString(2, sentimen); pstmt.setFloat(3, prob); pstmt.executeUpdate(); db2.closeConnection(); }

db.closeConnection(); } catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

}

}

public void updateTweetMaster() { try {

ConnectDatabaseClass db = new ConnectDatabaseClass(); Connection connections = db.getConnection();

where a.prob = (select max(b.prob) as max_prob from intisari b where b.sentimen <> 'netral' and b.id_tweet=a.id_tweet group by b.id_tweet limit 1)";

String SQL = "SELECT a.id_tweet, a.id_intisari, a.sentimen,a.prob FROM intisari a \n"

+ "INNER JOIN (SELECT id_tweet,MAX(b.prob) AS prob FROM intisari b \n"

(29)

20

+ "GROUP BY b.id_tweet) ss ON a.id_tweet = ss.id_tweet AND a.prob = ss.prob";

PreparedStatement pstmt = null;

pstmt = connections.prepareStatement(SQL); ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

//int id_intisari = rs.getInt("id_intisari"); int id_tweet = rs.getInt("id_tweet");

String sentimen = rs.getString("sentimen"); float prob = rs.getFloat("prob");

SQL = "UPDATE tweetmaster set sentimen = ? where id_tweet = ?"; ConnectDatabaseClass db1 = new ConnectDatabaseClass();

Connection con = db1.getConnection(); pstmt = con.prepareStatement(SQL); pstmt.setString(1, sentimen);

pstmt.setInt(2, id_tweet); pstmt.executeUpdate(); db1.closeConnection(); }

SQL = "UPDATE tweetmaster set sentimen = ? where sentimen is NULL"; ConnectDatabaseClass db1 = new ConnectDatabaseClass();

Connection con = db1.getConnection(); pstmt = con.prepareStatement(SQL); pstmt.setString(1, "netral");

//pstmt.setInt(2, id_tweet); pstmt.executeUpdate(); db1.closeConnection();

(30)

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

} }

public void intiToMaster() { try {

ConnectDatabaseClass db = new ConnectDatabaseClass(); Connection connections = db.getConnection();

String SQL = "SELECT c.id_tweet,a.sentimen,SUM(prob) FROM probabilitas a JOIN tweetngram b ON (a.id_ngram = b.id_ngram) JOIN tweetmaster c ON (b.id_tweet = c.id_tweet) GROUP BY c.id_tweet, a.sentimen";

PreparedStatement pstmt = null;

pstmt = connections.prepareStatement(SQL); ResultSet rs = pstmt.executeQuery();

while (rs.next()) {

//int id_intisari = rs.getInt("id_intisari"); int id_tweet = rs.getInt("id_tweet");

String sentimen = rs.getString("sentimen"); float prob = rs.getFloat("prob");

SQL = "INSERT INTO mastertweet (sentimen) VALUES (?)"; ConnectDatabaseClass db1 = new ConnectDatabaseClass(); Connection con = db1.getConnection();

pstmt = con.prepareStatement(SQL); pstmt.setString(1, sentimen);

(31)

22 } catch (SQLException ex) {

Logger.getLogger(ConnectDatabaseClass.class.getName()).log(Level.SEVERE, null, ex);

} }

public int countRows(int id_tweet, String sentimen) throws SQLException { // select the number of rows in the table

String SQL = "SELECT * FROM tweetngram where sentimen = ? and id_tweet = ?"; PreparedStatement pstmt = null;

ResultSet rs = null; int rowCount = -1; try {

ConnectDatabaseClass db = new ConnectDatabaseClass(); Connection connections = db.getConnection();

pstmt = connections.prepareStatement(SQL); pstmt.setString(1, sentimen);

pstmt.setInt(2, id_tweet);

// get the number of rows from the result set rs.next();

rowCount = rs.getInt(1); db.closeConnection(); } finally {

rs.close(); pstmt.close(); }

return rowCount; }

(32)

LAMPIRAN E

Lampiran ini berisi syntax pembuata database pada MySQL.

CREATE TABLE intisari (

tweetmaster_id_tweet INTEGER UNSIGNED NOT NULL,

id_intisari INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, sentimen VARCHAR(10) NULL,

prob FLOAT NULL,

PRIMARY KEY(tweetmaster_id_tweet, id_intisari), INDEX Table_04_FKIndex1(tweetmaster_id_tweet) );

CREATE TABLE probabilitas (

id_prob INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, tweetngram_id_ngram INTEGER UNSIGNED NOT NULL,

tweetngram_tweetmaster_id_tweet INTEGER UNSIGNED NOT NULL, ngram VARCHAR(255) NULL,

qty INTEGER UNSIGNED NULL, sentimen VARCHAR(10) NULL, prob FLOAT NULL,

PRIMARY KEY(id_prob, tweetngram_id_ngram, tweetngram_tweetmaster_id_tweet), INDEX probabilitas_FKIndex1(tweetngram_id_ngram, tweetngram_tweetmaster_id_tweet) );

(33)

24 CREATE TABLE stoplist (

id_stop INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, stopword VARCHAR(255) NULL,

PRIMARY KEY(id_stop) );

CREATE TABLE tweetmaster (

id_tweet INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, user_2 VARCHAR(255) NULL,

tweet VARCHAR(255) NULL, sentimen VARCHAR(10) NULL, PRIMARY KEY(id_tweet) );

CREATE TABLE tweetngram (

id_ngram INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, tweetmaster_id_tweet INTEGER UNSIGNED NOT NULL,

ngram VARCHAR(255) NULL,

(34)

BAB V

KESIMPULAN DAN SARAN

5.1Kesimpulan

Dari percobaan dan pengujian yang dilakukan pada penelitian ini, didapatkan kesimpulan sebagai berikut:

1. Penerapan metode Naive Bayes Classifier untuk Analisis Sentimen Terhadap Opini Publik Melalui Jejaring Sosial Twitter Menggunakan Metode Naive Bayes telah berhasil.

2. Nilai probabilitas masing-masing kata dapat dihitung menggunakan metode Naive Bayes Classifier.

5.2Saran

1. Akurasi dari metode ini dapat lebih ditingkatkan dengan menambah metode pemilihan fitur seperti stemming.

2. Dapat dikembangkan tidak hanya untuk tokoh publik saja, tetapi juga untuk instansi-instansi yang membutuhkan feedback dari para konsumennya.

(35)

75 Universitas Kristen Maranatha

DAFTAR PUSTAKA

Aliandu, P. 2013. Twitter Used by Indonesian President: An Sentiment Analysis of Timeline. Dalam Information Systems International Conference (ISICO), 2 – 4 December 2013.

Hidayatullah, Ahmad F & SN, Azhari. 2014. ANALISIS SENTIMEN DAN

KLASIFIKASI KATEGORI TERHADAP TOKOH PUBLIK PADA TWITTER. Dalam Seminar Nasional Informatika 2014 (SemnasIF 2014). 12 Agustus 2014. Yogyakarta. Komputer, Wahana. 2006. Panduan Praktis Pengolahan Database dengan MySQL.

Semarang: Penerbit Andi.

Mitchell, Tom M. 1997. Machine Learning. New York : McGraw-Hill.

Pang, B., Lee, L., & Vithyanathan, S. 2002. Thumbs Up ? SentimentClassification Using Machine Learning Techniques. Dalam Proceedings of The ACL-02 conference on Empirical methods in natural language processing, pp. 79-86. Stroudsburg: Association for computationalLinguistic.

Raharjo, Budi. 2011. Belajar Otodidak Membuat Database Menggunakan MySQL. Bandung : Informatika.

Raharjo, B, Heryanto, I & Haryono, A. 2012. Mudah Belajar Java. Bandung : Informatika.

SEVOCAB. 2008. Software and systems Engineering Vocabulary. Term : Flowchart. 31 Juli 2008. Diakses tanggal 3 Agustus 2015.

Soelistio, Yustinus E. & Surendra, M. R. S. 2013. SIMPLE TEXT MINING FOR SENTIMENT ANALYSIS OF POLITICAL FIGURE USING NAÏVE BAYES CLASSIFIER METHOD. Dalam The Proceeding of The 7th ICTS, 15-16 Mei 2013. Bali.

Twitter. 2015. http://apps.twitter.com. Diakses tanggal 3Agustus 2015.

(36)

Gambar

Tabel TWEETMASTER .........................................................................
Tabel TWEETMASTER .........................................................................
Gambar 4.13 Tampilan hasil klasifikasi ........................................................................

Referensi

Dokumen terkait

Setelah dilakukan pengujian pada data training , didapatkan hasil bahwa sistem analisis sentimen ini telah mencapai tingkat akurasi sebesar 80%. Hasil pengujian dapat

Dalam penyusunan penelitian ini peneliti melakukan penelitian tentang Klasifikasi Analisis Sentimen Terhadap kasus penusukan Wiranto Menggunakan Naive Bayes Classifier, yang dimana

Pada penelitian ini, dilakukan analisis sentimen masyarakat mengenai PSBB di Jakarta melalui media sosial Twitter dengan metode Naïve Bayes Classifier.. Data

Judul Skripsi : Analisis Sentimen Terhadap Akun Twitter Samsung Indonesia Dengan Metode Naïve Bayes Sebenarnya, saya di sini untuk mengatakan bahwa penulisan risalah

Metode yang digunakan dalam penelitian ini yaitu dengan menerapkan analisis sentimen menggunakan metode Naive Bayes Classifier dan TextBlob dari pustaka TetxBlob

Tujuan dari penelitian ini adalah untuk melakukan analisis sentimen menggunakan pemrograman R, mengetahui opini pengguna akun Twitter terhadap COVID-19 yang hasilnya

Komparasi Algoritma Klasifikasi Naive Bayes Dan K-Nearest Neighbors Dalam Analisis Sentimen Terhadap Opini Film Pada Twitter Muhammad Muharrom 4.3 Analisa Hasil Komparasi Berdasarkan

KESIMPULAN Berdasarkan hasil penerapan dan pengujian klasifikasi sentimen masyarakat di Twitter terhadap ancaman resesi ekonomi tahun 2023 memakai metode naïve bayes classifier dari