// Path: src/edu/antonym/Util.java
// public class Util {
// 	static void saveVectors(VectorEmbedding embed, Vocabulary vocab, File out) throws FileNotFoundException {
// 		int dim=embed.getDimension();
// 		
// 		PrintStream ps=new PrintStream(out);
// 		ps.println(dim);
// 		for(int i=0; i<vocab.size(); i++) {
// 			double[] vect=embed.getVectorRep(i);
// 			for(int j=0; j<dim; j++) {
// 				ps.print(vect[j]);
// 				ps.print(' ');
// 			}
// 			ps.println();
// 		}
// 		ps.close();
// 	}
// 	
// 	public static double cosineSimilarity(double[] vector1, double[] vector2) {
// 		double dotProduct = 0.0;
// 		double v1 = 0.0;
// 		double v2 = 0.0;
// 		double cosineSimilarity = 0.0;
// 
//         for (int i = 0; i < vector1.length; i++) //vector1 and vector2 must be of same length
//         {
//             dotProduct += vector1[i] * vector2[i];  
//             v1 += Math.pow(vector1[i], 2);  
//             v2 += Math.pow(vector2[i], 2); 
//         }
// 
//         v1 = Math.sqrt(v1);	
//         v2 = Math.sqrt(v2);	
// 
//         if (v1 != 0.0 && v2 != 0.0) {
//             cosineSimilarity = dotProduct / (v1 * v2);
//         } else {
//             return 0;
//         }
//         return cosineSimilarity;
//     }
// 	public static Random r=new Random();
// 	
// 	public static double dotProd(double[] vector1, double[] vector2) {
// 		double dotProduct = 0.0;
//         for (int i = 0; i < vector1.length; i++) //vector1 and vector2 must be of same length
//         {
//             dotProduct += vector1[i] * vector2[i];  
//         }
//         return dotProduct;
//     }
// 	
// 	public static double[] elemWiseProd(double[] vector1, double[] vector2) {
// 		double[] Product = new double[vector1.length];
//         for (int i = 0; i < vector1.length; i++) //vector1 and vector2 must be of same length
//         {
//             Product[i] = vector1[i] * vector2[i];  
//         }
//         return Product;
//     }
// 		
// 	public static int hashInteger(int i, int max) {
// 		r.setSeed(i);
// 		return r.nextInt(max);
// 	}
// 
// 	public static int hashIntegerPair(int i, int j, int max) {
// 		return hashInteger(31*i+j, max);
// 	}
// 	
// 	static class Pair {
// 		int a;
// 		int b;
// 		static int max;
// 		public Pair(int a, int b) {
// 			this.a = a;
// 			this.b = b;
// 		}
// 		@Override
// 	    public int hashCode() {
// 			int aa = a > b ? a:b;
// 			int bb = a > b ? b:a;	
// 			return aa * max + bb;
// 		}
// 		@Override
// 		public boolean equals(Object o) {       
// 	        Pair c = (Pair) o;	        
// 	        return a == c.a && b == c.b || a == c.b && b == c.a;
// 		}
// 	}
// 	
// 	
// 	public static void main(String[] args) throws IOException{
// 		Thesaurus t = new ThesaurusImp(new File("data/Rogets/antonym.txt"), new File("data/Rogets/synonym.txt"), new File("data/Rogets/vocabulary.txt"));
// 	}
// }
// 
// Path: src/edu/antonym/prototype/MetricEvaluator.java
// public interface MetricEvaluator {
// 	public double score(WordMetric metric) throws IOException;
// }
// 
// Path: src/edu/antonym/prototype/VectorEmbedding.java
// public interface VectorEmbedding extends WordMetric {
// 
// 	int getDimension();
// 	public double[] getVectorRep(int word);
// 	public int findClosestWord(double[] vector);
// 	Vocabulary getVocab();
// }
// 
// Path: src/edu/antonym/prototype/Vocabulary.java
// public interface Vocabulary {
// 	public int size();
// 	public int OOVindex();
// 	public String lookupIndex(int index);
// 	public int lookupWord(String word);
// 	public int getVocabSize();
// }
// 
// Path: src/edu/antonym/prototype/WordMetric.java
// public interface WordMetric {
// 	public Vocabulary getVocab();
// 
// 	public double similarity(int word1, int word2);
// }


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import edu.antonym.Util;
import edu.antonym.prototype.MetricEvaluator;
import edu.antonym.prototype.VectorEmbedding;
import edu.antonym.prototype.Vocabulary;
import edu.antonym.prototype.WordMetric;
package edu.antonym.test;



/**
 * This is the test case for synonyms, syn0.txt and syn1.txt. Each line
 * represents one single test. Each two words of a line are compared. Mean
 * squared error of synonym is also measured at the last. syn: 1
 * 
 */
public class TestCase2 implements MetricEvaluator {

	@Override
// Path: src/edu/antonym/Util.java
// public class Util {
// 	static void saveVectors(VectorEmbedding embed, Vocabulary vocab, File out) throws FileNotFoundException {
// 		int dim=embed.getDimension();
// 		
// 		PrintStream ps=new PrintStream(out);
// 		ps.println(dim);
// 		for(int i=0; i<vocab.size(); i++) {
// 			double[] vect=embed.getVectorRep(i);
// 			for(int j=0; j<dim; j++) {
// 				ps.print(vect[j]);
// 				ps.print(' ');
// 			}
// 			ps.println();
// 		}
// 		ps.close();
// 	}
// 	
// 	public static double cosineSimilarity(double[] vector1, double[] vector2) {
// 		double dotProduct = 0.0;
// 		double v1 = 0.0;
// 		double v2 = 0.0;
// 		double cosineSimilarity = 0.0;
// 
//         for (int i = 0; i < vector1.length; i++) //vector1 and vector2 must be of same length
//         {
//             dotProduct += vector1[i] * vector2[i];  
//             v1 += Math.pow(vector1[i], 2);  
//             v2 += Math.pow(vector2[i], 2); 
//         }
// 
//         v1 = Math.sqrt(v1);	
//         v2 = Math.sqrt(v2);	
// 
//         if (v1 != 0.0 && v2 != 0.0) {
//             cosineSimilarity = dotProduct / (v1 * v2);
//         } else {
//             return 0;
//         }
//         return cosineSimilarity;
//     }
// 	public static Random r=new Random();
// 	
// 	public static double dotProd(double[] vector1, double[] vector2) {
// 		double dotProduct = 0.0;
//         for (int i = 0; i < vector1.length; i++) //vector1 and vector2 must be of same length
//         {
//             dotProduct += vector1[i] * vector2[i];  
//         }
//         return dotProduct;
//     }
// 	
// 	public static double[] elemWiseProd(double[] vector1, double[] vector2) {
// 		double[] Product = new double[vector1.length];
//         for (int i = 0; i < vector1.length; i++) //vector1 and vector2 must be of same length
//         {
//             Product[i] = vector1[i] * vector2[i];  
//         }
//         return Product;
//     }
// 		
// 	public static int hashInteger(int i, int max) {
// 		r.setSeed(i);
// 		return r.nextInt(max);
// 	}
// 
// 	public static int hashIntegerPair(int i, int j, int max) {
// 		return hashInteger(31*i+j, max);
// 	}
// 	
// 	static class Pair {
// 		int a;
// 		int b;
// 		static int max;
// 		public Pair(int a, int b) {
// 			this.a = a;
// 			this.b = b;
// 		}
// 		@Override
// 	    public int hashCode() {
// 			int aa = a > b ? a:b;
// 			int bb = a > b ? b:a;	
// 			return aa * max + bb;
// 		}
// 		@Override
// 		public boolean equals(Object o) {       
// 	        Pair c = (Pair) o;	        
// 	        return a == c.a && b == c.b || a == c.b && b == c.a;
// 		}
// 	}
// 	
// 	
// 	public static void main(String[] args) throws IOException{
// 		Thesaurus t = new ThesaurusImp(new File("data/Rogets/antonym.txt"), new File("data/Rogets/synonym.txt"), new File("data/Rogets/vocabulary.txt"));
// 	}
// }
// 
// Path: src/edu/antonym/prototype/MetricEvaluator.java
// public interface MetricEvaluator {
// 	public double score(WordMetric metric) throws IOException;
// }
// 
// Path: src/edu/antonym/prototype/VectorEmbedding.java
// public interface VectorEmbedding extends WordMetric {
// 
// 	int getDimension();
// 	public double[] getVectorRep(int word);
// 	public int findClosestWord(double[] vector);
// 	Vocabulary getVocab();
// }
// 
// Path: src/edu/antonym/prototype/Vocabulary.java
// public interface Vocabulary {
// 	public int size();
// 	public int OOVindex();
// 	public String lookupIndex(int index);
// 	public int lookupWord(String word);
// 	public int getVocabSize();
// }
// 
// Path: src/edu/antonym/prototype/WordMetric.java
// public interface WordMetric {
// 	public Vocabulary getVocab();
// 
// 	public double similarity(int word1, int word2);
// }


// Path: src/edu/antonym/test/TestCase2.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import edu.antonym.Util;
import edu.antonym.prototype.MetricEvaluator;
import edu.antonym.prototype.VectorEmbedding;
import edu.antonym.prototype.Vocabulary;
import edu.antonym.prototype.WordMetric;

package edu.antonym.test;



/**
 * This is the test case for synonyms, syn0.txt and syn1.txt. Each line
 * represents one single test. Each two words of a line are compared. Mean
 * squared error of synonym is also measured at the last. syn: 1
 * 
 */
public class TestCase2 implements MetricEvaluator {

	@Override
	public double score(WordMetric metric) throws IOException {