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

LAMPIRAN

Universitas Sumatera Utara

LAMPIRAN
LISTING PROGRAM

Classification.java

package usu.ti;
import
import
import
import
import
import
import
import
import
import
import

import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import

import
import
import
import
import
import
import

edu.ucla.sspace.common.SemanticSpace;
static edu.ucla.sspace.common.Similarity.cosineSimilarity;
edu.ucla.sspace.matrix.Matrix;
edu.ucla.sspace.matrix.MatrixBuilder;
edu.ucla.sspace.matrix.TfIdfTransform;
edu.ucla.sspace.text.IteratorFactory;
edu.ucla.sspace.util.SparseArray;
edu.ucla.sspace.util.SparseIntHashArray;
edu.ucla.sspace.vector.Vector;
java.io.BufferedReader;
java.io.File;
java.io.IOException;

java.io.StringReader;
java.util.ArrayList;
java.util.Collections;
java.util.HashMap;
java.util.Iterator;
java.util.Map;
java.util.Properties;
java.util.Random;
java.util.Set;
java.util.TreeMap;
java.util.concurrent.ConcurrentHashMap;
java.util.concurrent.ConcurrentMap;
java.util.concurrent.atomic.AtomicInteger;
java.util.logging.Level;
java.util.logging.Logger;
usu.ti.model.data.Document;
weka.classifiers.Classifier;
weka.classifiers.Evaluation;
weka.classifiers.lazy.IBk;
weka.core.Attribute;

weka.core.DistanceFunction;
weka.core.FastVector;
weka.core.Instance;
weka.core.Instances;
weka.core.SelectedTag;
weka.core.SerializationHelper;

Universitas Sumatera Utara

import
import
import
import
import

weka.core.converters.TextDirectoryLoader;
weka.core.neighboursearch.LinearNNSearch;
weka.core.tokenizers.NGramTokenizer;
weka.filters.Filter;
weka.filters.unsupervised.attribute.StringToWordVector;


public class Classification implements SemanticSpace {
public Classification () {
this(System.getProperties());
}
public Classification ( Properties pProperties) {
mTermToIndex = new ConcurrentHashMap ();
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;
}

Universitas Sumatera Utara

Closer.java
/*
* To change this license header, choose License Headers
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.

*/

in

Project

in

Project

package usu.ti;
import java.io.Closeable;
import java.io.IOException;

public class Closer implements Closeable {
private Closeable closeable;
public 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
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package usu.ti;
import
import
import
import
import

import
import
import
import
import

com.mongodb.BasicDBObject;
com.mongodb.DB;
com.mongodb.DBCollection;
com.mongodb.DBCursor;
com.mongodb.DBObject;
com.mongodb.MongoClient;
com.mongodb.ServerAddress;
java.io.File;
java.net.UnknownHostException;
java.util.ArrayList;

Universitas Sumatera Utara

import java.util.Arrays;

import java.util.logging.Level;
import java.util.logging.Logger;
public class CrawlerConfiguration {
public CrawlerConfiguration () {
try {
mMongoClient
=
new
MongoClient(Arrays.asList(new
ServerAddress("127.0.0.1", 27017)));
mDB = mMongoClient.getDB("emotional");
mListCrawlerWeb = new ArrayList ();
mCollectionCrawlerList = mDB.getCollection("CrawlerList");
if ( mCollectionCrawlerList.count() == 0 ) {
// Membuat Collection baru dan isi sementara
mDB.createCollection("CrawlerList", null);
mCollectionCrawlerList = mDB.getCollection("CrawlerList");
BasicDBObject

dObject


=

new

BasicDBObject("Name",

"TribunNews").
append("URL",
"http://www.tribunnews.com/").
append("SelectionID", "div.txtarticle");
mCollectionCrawlerList.insert(dObject);
}
DBCursor dCursor = mCollectionCrawlerList.find();
try {
// Mengambil semua data website yang mau di crawling
while ( dCursor.hasNext()) {
DBObject dObject = dCursor.next();
CrawlerWeb dCrawlerWeb = new CrawlerWeb ();
dCrawlerWeb.setName(dObject.get("Name").toString());
dCrawlerWeb.setURL(dObject.get("URL").toString());
dCrawlerWeb.setSelectionID(dObject.get("SelectionID").toString());
mListCrawlerWeb.add(dCrawlerWeb);
}
} finally {
dCursor.close();
}
// Membuat StorageFolder
File dDirectoryStorageFolder = new File (STORAGE_FOLDER);

Sentiment.java
/*
* To change
Properties.

this

license

header,

choose

License

Headers

in

Project

Universitas Sumatera Utara

* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package usu.ti;
import
import
import
import
import
import
import
import
import

com.google.common.io.Files;
java.io.File;
java.io.IOException;
java.nio.charset.Charset;
java.util.ArrayList;
java.util.Iterator;
java.util.List;
java.util.logging.Level;
java.util.logging.Logger;

public class Sentiment {
private static volatile Sentiment instance = null;
private Sentiment () {
try {
arrayOfPositiveWords = new ArrayList ();
arrayOfNegativeWords = new ArrayList ();
// Load Positive Words
List
positiveWords
=
Files.readLines(new
File
(
System.getProperty("user.dir")
+
"/assets/POSITIVE_WORDS.txt"
),
Charset.defaultCharset());
String word;
int i, n;
for ( i = 0, n = positiveWords.size(); i < n; i++ ) {
word = positiveWords.get(i);
if (word.length() > 1) {
arrayOfPositiveWords.add(word);
}
}
// Load Negative Words
List
negativeWords
=
Files.readLines(new
File
(
System.getProperty("user.dir")
+
"/assets/NEGATIVE_WORDS.txt"
),
Charset.defaultCharset());
for ( i = 0, n = positiveWords.size(); i < n; i++ ) {
word = negativeWords.get(i);
if (word.length() > 1) {
arrayOfNegativeWords.add(word);
}
}
}
public int getNumberOfPositive () {
return mNumberOfPositive;
}

Universitas Sumatera Utara

public int getNumberOfNegative () {
return mNumberOfNegative;
}
public double getSentimentScore () {
return mSentimentScore;
}
private
private
private
private
private

ArrayList arrayOfPositiveWords;
ArrayList arrayOfNegativeWords;
int mNumberOfPositive;
int mNumberOfNegative;
double mSentimentScore;}

Stemming.java
package usu.ti;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
public class Stemming {
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
words = new ConcurrentHashMap(26);
String content = "";
for (char c = 'a'; c