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;
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;
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;
import java.util.Arrays;
* 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" ),
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
//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;
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;
}
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
try {
javax.swing.UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException ex) {
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
//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
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;
public String getURL () { return mURL;
}
public void setURL ( String pURL ) { mURL = pURL;