public static void evaluate(){
    	
    	System.out.printf("%-7s \t\t %s \t %s \t %s \t %s \t %s \t %s \n", 
    						"Label", "Precision", "Recall", "F1", 
    						"correctLabelCounts", "predictedLabelCounts", "labelCounts");
    	double totalCorrectCount = 0;
    	double totalpredictedCount = 0;
    	double totalLabelCount = 0;
    	
    	for(String label : labelCounts.keySet()){
    		
    		if(label.equals("O"))
    			continue;
    		
    		double Precision;
    		double Recall;
    		double F1;
    		double correctCount;
    		double predictedCount;
    		double labelCount;
    		
    		if(correctLabelCounts.containsKey(label) && predictedLabelCounts.containsKey(label)){
    			correctCount = correctLabelCounts.get(label).doubleValue();
    			predictedCount = predictedLabelCounts.get(label).doubleValue();
    			Precision =  correctCount / predictedCount;
    		} else {
    			correctCount = 0;
    			predictedCount = 0;
    			Precision = -1;
    		}
    		
    		if(correctLabelCounts.containsKey(label) && labelCounts.containsKey(label)){
    			correctCount = correctLabelCounts.get(label).doubleValue();
    			labelCount = labelCounts.get(label).doubleValue();
    			Recall = correctCount / labelCount;
    		} else {
    			correctCount = 0;
    			labelCount = 0;
    			Recall = -1;
    		}
    		
    		if(Precision > 0 && Recall > 0){
    			F1 = 2/(1/Precision + 1/Recall);
    		} else {
    			F1 = -1;
    		}
    		
    		totalCorrectCount += correctCount;
    		totalpredictedCount += predictedCount;
    		totalLabelCount += labelCount;
    		
    		System.out.printf("%-7s \t\t %f \t %f \t %f \t %f \t %f \t %f \n", 
    							label, Precision, Recall, F1, correctCount, predictedCount,
    							labelCount);    		
    	}
    	
    	double totalPrecision = totalCorrectCount/totalpredictedCount;
    	double totalRecall = totalCorrectCount/totalLabelCount;
    	double totalF1 = 2/(1/totalPrecision + 1/totalRecall);
    	
    	System.out.printf("%-7s \t\t %f \t %f \t %f \t %f \t %f \t %f \n", 
							"Total", totalPrecision, totalRecall, totalF1, 
							totalCorrectCount, totalpredictedCount, totalLabelCount);
    	
    	//System.out.println(labelCounts.keySet().toString());
    	//System.out.println(predictedLabelCounts.keySet().toString());
    	//System.out.println(correctLabelCounts.keySet().toString());
    }