• Tidak ada hasil yang ditemukan

Sentiment Analysis Pada Teks Bahasa Indonesia Menggunakan Support Vector Machine (SVM) Dan K-Nearest Neighbor (K-NN)

N/A
N/A
Protected

Academic year: 2017

Membagikan "Sentiment Analysis Pada Teks Bahasa Indonesia Menggunakan Support Vector Machine (SVM) Dan K-Nearest Neighbor (K-NN)"

Copied!
14
0
0

Teks penuh

(1)
(2)

LAMPIRAN

LISTING PROGRAM

Classification.java

package usu.ti;

import edu.ucla.sspace.common.SemanticSpace;

import static edu.ucla.sspace.common.Similarity.cosineSimilarity; import edu.ucla.sspace.matrix.Matrix;

import edu.ucla.sspace.matrix.MatrixBuilder; import edu.ucla.sspace.matrix.TfIdfTransform; import edu.ucla.sspace.text.IteratorFactory; import edu.ucla.sspace.util.SparseArray;

import edu.ucla.sspace.util.SparseIntHashArray; import edu.ucla.sspace.vector.Vector;

import java.io.BufferedReader; import java.io.File;

import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map;

import java.util.Properties; import java.util.Random; import java.util.Set; import java.util.TreeMap;

import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap;

import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level;

import java.util.logging.Logger; import usu.ti.model.data.Document; import weka.classifiers.Classifier; import weka.classifiers.Evaluation; import weka.classifiers.lazy.IBk; import weka.core.Attribute;

import weka.core.DistanceFunction; import weka.core.FastVector;

import weka.core.Instance; import weka.core.Instances; import weka.core.SelectedTag;

(3)

import weka.core.converters.TextDirectoryLoader; import weka.core.neighboursearch.LinearNNSearch; import weka.core.tokenizers.NGramTokenizer; import weka.filters.Filter;

import weka.filters.unsupervised.attribute.StringToWordVector;

public class Classification implements SemanticSpace {

public Classification () {

this(System.getProperties()); }

public Classification ( Properties pProperties) {

mTermToIndex = new ConcurrentHashMap<String, Integer> (); mTermIndexCounter = new AtomicInteger(0);

mTermDocumentMatrixBuilder = Matrices.getMatrixBuilderForSVD(); mWordSpace = null;

mDocumentSpace = null; }

private int mMaximumDocuments; private int mMaximumPositive;

private int mTotalTest; private int mTotalTrain;

private int mTotalPositiveTrain; private int mTotalNegativeTrain; private int mTotalNeutralTrain;

private int mTotalPositiveTest; private int mTotalNegativeTest; private int mTotalNeutralTest;

private int mTotalPositiveKNN; private int mTotalNegativeKNN; private int mTotalNeutralKNN;

private int mTotalPositiveSVM; private int mTotalNegativeSVM; private int mTotalNeutralSVM;

private double mKNNAccuration; private double mSVMAccuration;

(4)

Closer.java

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates * and open the template in the editor.

*/

package usu.ti;

import java.io.Closeable; import java.io.IOException;

public class Closer implements Closeable { private Closeable closeable;

public <T extends Closeable> T using(T t) { closeable = t;

return t; }

@Override public void close() throws IOException { if (closeable != null) {

closeable.close(); }

} }

CrawlerConfiguration.java

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates * and open the template in the editor.

*/

package usu.ti;

import com.mongodb.BasicDBObject; import com.mongodb.DB;

import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.MongoClient; import com.mongodb.ServerAddress; import java.io.File;

(5)

import java.util.Arrays;

(6)

* To change this template file, choose Tools | Templates

private static volatile Sentiment instance = null;

System.getProperty("user.dir") + "/assets/POSITIVE_WORDS.txt" ),

Charset.defaultCharset());

System.getProperty("user.dir") + "/assets/NEGATIVE_WORDS.txt" ),

(7)

private ArrayList<String> arrayOfPositiveWords; private ArrayList<String> arrayOfNegativeWords; private int mNumberOfPositive;

private int mNumberOfNegative; private double mSentimentScore;}

Stemming.java

public Stemming(String directory) throws Exception{ initialization(directory);

}

private void initialization(String directory) throws Exception{ // Load all words to memory divided based on first character

(8)

//Logger.getLogger(FastStemming.class.getName()).log(Level.SEVERE, null,

ex);

} } }

StopWords.java

package usu.ti;

import java.io.File;

import java.io.FileNotFoundException; import java.io.FileReader;

import java.util.Scanner;

import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level;

import java.util.logging.Logger;

public class StopWords {

public StopWords(String path){ try {

File file = new File(path);

Scanner sc = new Scanner(new FileReader(file));

stopWords = new ConcurrentHashMap<String, Boolean>(); while(sc.hasNextLine()){

String s = sc.nextLine();

String[] arrWords = s.split("\\s+"); for(String item : arrWords){

stopWords.put(item, Boolean.TRUE); }

} }

catch (FileNotFoundException ex) {

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

} }

public boolean check(String word){ if (stopWords.get(word) != null) return true;

return false; }

private ConcurrentHashMap<String,Boolean> stopWords;

Tokenization.java

package usu.ti;

import java.io.BufferedReader; import java.io.IOError;

(9)

import java.io.StringReader;

* Source :

https://github.com/fozziethebeat/S-Space/blob/master/src/main/java/edu/ucla/sspace/text/WordIterator.java */

public class Tokenization implements Iterator<String> {

public static final String EMPTY_TOKEN = "";

public Tokenization ( String text ) {

this(new BufferedReader(new StringReader(text.toLowerCase()))); }

public Tokenization ( BufferedReader pBufferedReader ) {

throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

}

private static final Pattern notWhiteSpace = Pattern.compile("\\S+");

private final BufferedReader mBufferedReader; private Matcher mMatcher;

(10)

}

Emotional.java

package usu.ti;

import edu.uci.ics.crawler4j.crawler.CrawlConfig; import edu.uci.ics.crawler4j.crawler.CrawlController; import edu.uci.ics.crawler4j.fetcher.PageFetcher;

import edu.uci.ics.crawler4j.robotstxt.RobotstxtConfig; import edu.uci.ics.crawler4j.robotstxt.RobotstxtServer; import java.io.IOException;

import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; import usu.ti.vc.MainJFrame;

public class emotional {

/**

* @param args the command line arguments */

public static void main(String[] args) { /*

Nama Aplikasi: Emotional

Aplikasi ini terbagi menjadi dua bagian, yaitu: 1. Pembuatan DataSet

Langkah-langkah dalam pembuatan DataSet ini adalah dengan men-crawling sumber(website, blog, twitter, dll)

lalu setiap dataset ini akan di kelompokkan berdasarkan sentiment positif atau negatif.

Proses pengelompokan ini dilakukan secara semi-otomatis, dimana pertama akan dikelompokkan oleh aplikasi

dengan menggunakan Sentiment Based Text Analysis setelah itu akan divalidasi kembali oleh user/manusia.

Selanjutnya DataSet ini akan digunakan dalam proses penghitungan Sentiment Based Document yang akan menggunakan

K-NN dan SVM.

2. Penghitungan Sentiment terhadap dokumen berdasarkan keyword yang dimasukkan. Penghitungan sentiment ini menggunakan

K-NN dan SVM. Hasil dari SVM akan divalidasi menggunakan Cross-Fold Validation.

*/

/* Set the Nimbus look and feel */

//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">

/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

* For details see

(11)

try {

javax.swing.UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) {

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

(12)

//mCrawlerMachine.Start();

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

// Logger.getLogger(emotional.class.getName()).log(Level.SEVERE, null, ex); tergabung dalam pusat informasi relawan terus melakukan gerakan blusukan ke sejumlah daerah di jakarta. hal ini dikatakan oleh koordinator pusat informasi rerlawan, panel barus,\\\" sabtu (21/6/2014). dikatakan, blusukan yang akan dilakukan adalah untuk menangkal setiap fitnah yang semakin

meingkat terhadap pasangan jokowi-jk. “secara langsung kami akan memberikan

kabar kepada masyarakat, termasuk relawan yang berada di posko-posko terkait penyataan pak wiranto soal update terbaru soal pelanggaran ham dan

penculikan. agar masyarakat tahu persoalan tersebut dengan jernih,”

ujarnya. mantan aktivis 98 ini menambahkan, gerakan blusukan penyebaran tabloid ini juga sebagai pesan moral bahwa jokowi-jk yang dekat dengan rakyat. dengan pesan moral ini, lanjutnya, relawan jokowi-jk akan langsung menemui rakyat, menyebarkan pesan politik. sekaligus, memberikan pendidikan politik terhadap masyarakat sehingga masyarakat cerdas dalam menentukan

pilihan untuk presiden dan wakilnya “langkah ini untuk memperkuat relawan

melawan fitnah. antisipasi kecurangan dan intimidasi,”tegasnya. gerakan

blusukan ini rencananya diikuti oleh ratusan relawan. termasuk, oleh salah seorang relawan yang telah mengelilingi indonesia untuk menyebarkan pesan

positif agar memilih jokowi-jk. “pak rusmin berasal dari solo berkeliling

indonesia untuk mengkampanyekan pasangan jokowi-jk. ini semangat bagi kita semua, belajar dari pak rusmin tentang kesetian memilih capres-dan

cawapres,belajar semangat memperjuangkan jokowi-jk ini,” ungkapnya. panel

(13)

kaos, stiker dan spanduk. “blusukan kedua ini kami rencananya akan berkeliling di wilayah jakarta barat dan jakarta utara,” kata panel.";

System.out.println(FeatureExtraction.getInstance().process(test)); }

}

DataSource.java

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates * and open the template in the editor.

*/

package usu.ti.model.data;

import com.mongodb.BasicDBObject; import com.mongodb.MongoException; import com.mongodb.WriteResult; import java.util.ArrayList; import org.bson.BasicBSONObject; import org.bson.types.ObjectId; import usu.ti.model.DBHelper;

public class DataSource {

public static final String COLLECTION_NAME = "DataSources"; public static final String ID = "_id";

public static final String TITLE = "Title"; public static final String URL = "URL";

public static final String SELECTION_ID = "SelectionID"; public static final String ENABLE = "Enable";

/* Setter and Getter */ public ObjectId getID () { return mID;

}

public void setID ( ObjectId pID ) { mID = pID;

}

public String getTitle () { return mTitle;

}

public void setTitle ( String pTitle ) { mTitle = pTitle;

(14)

public String getURL () { return mURL;

}

public void setURL ( String pURL ) { mURL = pURL;

Referensi

Dokumen terkait

Tujuan penelitian ini adalah Menganalisa hubungan depresi dengan kadar [9] gula darah acak pada penderita Diabetes Mellitus tipe 2 di Ruang Dahlia RSUD Jombang.. Desain penelitian

ROM terdiri dari fleksi dan ekstensi siku, pronasi dan supinasi lengan bawah, fleksi bahu, adduksi, dan abduksi bahu, rotasi bahu, ekstensi jari jari tangan, inversi dan iversi

Belajar merupakan suatu perubahan tingkah laku yang relatif menetap pada seseorang akibat pengalaman atau latihan yang menyangkut aspek fisik maupun psikis, seperti dari tidak

Intervensi yang paling utama dalam diagnosa Ketidakefektifan perfusi jaringan perifer adalah tindakan Konservatif yaitu non pembedahan dengan memberikan traksi yaitu

The main objectives of this study are the (1) measurement and mapping of the spatial distribution of the deformation rates in the study area; (2) analysis of

Level 3 ini aktor harus memakan lebih banyak keju dan dihadapkan dengan musuh yang lebih banyak maka dari itu pada level 3 ini pemain harus lebih berhati-hati

informasi manajemen rumah sakit adalah suatu sistem berbasis komputer yang.. menghasilkan sekumpulan informasi yang telah diolah dan saling

Pada tahap pelaksanaan, kegiatan pembelajaran dibagi menjadi tiga bagian yaitu kegiatan awal, kegiatan inti dan kegiatan penutup. Pada kegiatan awal dimulai dengan