123
return mean; }
private double[] getStdDevdouble[][] mat { std = new double[mat.length];
for int i = 0; i mat.length; i++ { double temp = 0;
for int j = 0; j mat[i].length; j++ { temp += Math.powmat[i][j] - mean[i], 2;
} temp = temp mat[i].length;
std[i] = Math.sqrttemp; }
return std; }
private double[] getMindouble[][] mat { min = new double[mat[0].length];
for int i = 0; i mat[0].length; i++ { double m = mat[0][i];
for int j = 0; j mat.length; j++ { if mat[j][i] m {
m = mat[j][i]; }
} min[i] = m;
} return min;
} private double[] getMaxdouble[][] mat {
max = new double[mat[0].length]; for int i = 0; i mat[0].length; i++ {
124
double m = mat[0][i]; for int j = 0; j mat.length; j++ {
if mat[j][i] m { m = mat[j][i];
} }
max[i] = m; }
return max; }
}
6. VarianceInit.java
package sentimentanalysis; import java.util.ArrayList;
import java.util.Collections; import java.util.Iterator;
import java.util.LinkedHashMap; public class VarianceInit {
private LinkedHashMapInteger, Double varianceMap = new LinkedHashMap; private LinkedHashMapInteger, double[] sortedMap = new LinkedHashMap;
private LinkedHashMapInteger, double[] centroidMap = new LinkedHashMap; private int max;
public VarianceInitLinkedHashMapInteger, double[] feature, int k { LinkedHashMapInteger, double[] termsMap = new LinkedHashMap;
for int i = 1; i = feature.get1.length; i++ { double[] d = new double[feature.size];
for int j : feature.keySet {
125
d[j - 1] = feature.getj[i - 1]; }
termsMap.puti, d; }
getVariancetermsMap; sortMapfeature;
getInitCentsortedMap, k; }
public LinkedHashMap getInitialCentroid { return centroidMap;
} public LinkedHashMap getSortedMap {
return sortedMap; }
private void getVarianceLinkedHashMapInteger, double[] map { max = 1;
for int key : map.keySet { double[] data = map.getkey;
double sum = 0; double mean;
double temp = 0; double variance;
for double a : data { sum += a;
} mean = sum data.length;
for double a : data { temp += mean - a mean - a;
126
} variance = temp data.length;
varianceMap.putkey, variance; if varianceMap.getkey varianceMap.getmax {
max = key; }
} }
private LinkedHashMap sortMapLinkedHashMapInteger, double[] passedMap { ArrayList mapKeys = new ArrayListpassedMap.keySet;
ArrayList mapValues = new ArrayList; for int key : passedMap.keySet {
mapValues.addpassedMap.getkey[max - 1]; }
Collections.sortmapValues; Collections.sortmapKeys;
Iterator valueIt = mapValues.iterator; while valueIt.hasNext {
Object val = valueIt.next; Iterator keyIt = mapKeys.iterator;
while keyIt.hasNext { Object key = keyIt.next;
double comp1 = passedMap.getkey[max - 1]; double comp2 = double val;
if comp1 == comp2 { mapKeys.removekey;
sortedMap.putint key, passedMap.getkey; break;
} }
}
127
return sortedMap; }
private LinkedHashMap getInitCentLinkedHashMapInteger, double[] sortedMap, int k { ArrayList mapKeys = new ArrayListsortedMap.keySet;
int splitSize = int Math.ceildouble sortedMap.size k; int x = 0;
for int i = 0; i k - 1; i++ { ArrayList index = new ArrayList;
for int j = x; j = x + splitSize - 1; j++ { index.addmapKeys.getj;
} centroidMap.putmedianindex, sortedMap.getmedianindex;
x = x + splitSize; }
ArrayList index = new ArrayList; for int j = x; j sortedMap.size; j++ {
index.addmapKeys.getj; }
centroidMap.putmedianindex, sortedMap.getmedianindex; return centroidMap;
} public static int medianArrayList m {
int middle = m.size 2; if m.size 2 == 1 {
return int m.getmiddle; } else {
return intintm.getmiddle - 1 + intm.getmiddle 2; }
} }
128
7. Distance.java
package sentimentanalysis; public class Distance {
double dotProduct = 0.0; double magnitude1 = 0.0;
double magnitude2 = 0.0; double cosSim;
double eucDist = 0.0; double manDist = 0.0;
public double cosineSimilaritydouble[] input1, double[] input2 { for int i = 0; i input1.length; i++ {
dotProduct += input1[i] input2[i]; magnitude1 += Math.powinput1[i], 2;
magnitude2 += Math.powinput2[i], 2; }
magnitude1 = Math.sqrtmagnitude1; magnitude2 = Math.sqrtmagnitude2;
if magnitude1 = 0.0 magnitude2 = 0.0 { cosSim = dotProduct magnitude1 magnitude2;
} else { return 0.0;
} return cosSim;
} public double euclideanDistancedouble[] input1, double[] input2 {
for int i = 0; i input1.length; i++ {
129
eucDist += Math.powinput1[i]-input2[i], 2; }
eucDist = Math.sqrteucDist; return eucDist;
} public double manhattanDistancedouble[] input1, double[] input2 {
for int i = 0; i input1.length; i++ { manDist += Math.absinput1[i]-input2[i];
} return manDist;
} }
8. NegationHandling.java
package sentimentanalysis; import java.util.ArrayList;
import java.util.LinkedHashMap; public class NegationHandling {
public LinkedHashMap negationHandlingLinkedHashMapInteger, ArrayListString map { for int key : map.keySet {
ArrayListString list = map.getkey; for int i = 0; i list.size; i++ {
String check = list.geti; switch check {
case tidak: if i + 1 = list.size - 1 {
list.seti, tidak + list.geti + 1;