// Path: utils-basickit/src/main/java/com/cognitionis/utils_basickit/StringUtils.java
// public class StringUtils {
// 
//     /**
//      * Returns if a char is ASCII (fastest than the generic function: existsInEncoding(char c, String encoding))
//      * @param c
//      * @return
//      */
//     public static boolean isASCII(char c) {
//         return (((int) c >> 7) == 0);
//     }
// 
//     /**
//      * Returns if a char is ISO-8859-1 (fastest than the generic function: existsInEncoding(char c, String encoding))
//      * @param c
//      * @return
//      */
//     public static boolean isISO_8859_1(char c) {
//         return (((int) c) < 256);
//     }
// 
//     /**
//      * Returns if a char is of an encoding
//      * @param c
//      * @return
//      */
//     public static boolean existsInEncoding(char c, String encoding) {
//         try {
//             String s = "" + c;
//             byte bytes[] = s.getBytes(encoding);
//             String s2 = new String(bytes, encoding);
//             return (s2.equals(s));
//         } catch (Exception e) {
//             System.err.println("Errors found (StringUtils):\n\t" + e.toString());
//             if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
//                 e.printStackTrace(System.err);
//                 System.exit(1);
//             }
//             return false;
//         }
//     }
// 
//     /**
//      * Returns if a string is of an encoding
//      * @param s
//      * @return
//      */
//     public static boolean existsInEncoding(String s, String encoding) {
//         try {
//             byte bytes[] = s.getBytes(encoding);
//             String s2 = new String(bytes, encoding);
//             return (s2.equals(s));
//         } catch (Exception e) {
//             System.err.println("Errors found (StringUtils):\n\t" + e.toString());
//             if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
//                 e.printStackTrace(System.err);
//                 System.exit(1);
//             }
//             return false;
//         }
//     }
// 
//     public static int countOccurrencesOf(String source, char pattern) {
//         int count = 0;
//         if (source != null) {
//             int found = -1;
//             int start = 0;
// 
// 
//             while ((found = source.indexOf(pattern, start)) != -1) {
//                 start = found + 1;
//                 count++;
//             }
//             return count;
//         } else {
//             return 0;
//         }
//     }
// 
//     public static int countOccurrencesOf(String source, String pattern) {
//         int count = 0;
//         if (source != null) {
//             final int len = pattern.length();
//             int found = -1;
//             int start = 0;
// 
// 
//             while ((found = source.indexOf(pattern, start)) != -1) {
//                 start = found + len;
//                 count++;
//             }
//             return count;
//         } else {
//             return 0;
//         }
//     }
// 
//     public static String twoDecPosS(double d) {
//         Double a;
//         String twoDec;
//         int negative_inc = 0;
//         int decimal_pos = 0;
// 
//         a = (((int) Math.round((d) * 100.0)) / 100.0);
//         twoDec = a.toString();
// 
//         decimal_pos = twoDec.lastIndexOf('.');
//         if (decimal_pos == -1) {
//             twoDec += ".";
//             decimal_pos = twoDec.length();
//         }
//         twoDec += "00";
// 
//         twoDec = twoDec.substring(0, decimal_pos + 3);
// 
//         return twoDec;
//     }
// 
// public static <T> T[] concatArray(T[] first, T[] second) {
//   T[] result = Arrays.copyOf(first, first.length + second.length);
//   System.arraycopy(second, 0, result, first.length, second.length);
//   return result;
// }
// 
// 
// }


import java.util.*;
import com.cognitionis.utils_basickit.StringUtils;
    }

    public double getAccuracyTokenLevel(String e) {
        return ((double) (tp.get(e) + tn.get(e)) / (tp.get(e) + tn.get(e) + fp.get(e) + fn.get(e)));
    }

    // IMPORTANT: ONLY FOR TEXT TYPE EVALUATION (SPAN) --> SPAN SLOPPY
    // NOT FOR ATTRIBUTES (IE, CLASS)
    public double getPrecisionRelaxed(String e) {
        return Precision(corr.get(e).doubleValue() + inco.get(e).doubleValue(), getACT(e));
    }

    public double getRecallRelaxed(String e) {
        return Recall(corr.get(e).doubleValue() + inco.get(e).doubleValue(), getPOS(e));
    }

    public double getF1Relaxed(String e) {
        double p = getPrecisionRelaxed(e);
        double r = getRecallRelaxed(e);
        return F1(p, r);
    }

    public void print() throws Exception {
        print("simple");
    }

    public void print(String option) throws Exception {
        //System.out.println("KEYFILE: " + this.keyfile);
        for (String e : elem_judgements.keySet()) {
            System.out.println("\t>" + e.toUpperCase() + "<  (POS=" + getPOS(e) + ",ACT=" + getACT(e) + "):\tPrecision=" + oneDecPos(getPrecision(e)) + "%\tRecall=" + oneDecPos(getRecall(e)) + "%\tF1=" + oneDecPos(getF1(e)) + "%\t- corr=" + corr.get(e) + ";inco=" + inco.get(e) + ";spur=" + spur.get(e) + ";miss=" + miss.get(e) + ";");
// Path: utils-basickit/src/main/java/com/cognitionis/utils_basickit/StringUtils.java
// public class StringUtils {
// 
//     /**
//      * Returns if a char is ASCII (fastest than the generic function: existsInEncoding(char c, String encoding))
//      * @param c
//      * @return
//      */
//     public static boolean isASCII(char c) {
//         return (((int) c >> 7) == 0);
//     }
// 
//     /**
//      * Returns if a char is ISO-8859-1 (fastest than the generic function: existsInEncoding(char c, String encoding))
//      * @param c
//      * @return
//      */
//     public static boolean isISO_8859_1(char c) {
//         return (((int) c) < 256);
//     }
// 
//     /**
//      * Returns if a char is of an encoding
//      * @param c
//      * @return
//      */
//     public static boolean existsInEncoding(char c, String encoding) {
//         try {
//             String s = "" + c;
//             byte bytes[] = s.getBytes(encoding);
//             String s2 = new String(bytes, encoding);
//             return (s2.equals(s));
//         } catch (Exception e) {
//             System.err.println("Errors found (StringUtils):\n\t" + e.toString());
//             if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
//                 e.printStackTrace(System.err);
//                 System.exit(1);
//             }
//             return false;
//         }
//     }
// 
//     /**
//      * Returns if a string is of an encoding
//      * @param s
//      * @return
//      */
//     public static boolean existsInEncoding(String s, String encoding) {
//         try {
//             byte bytes[] = s.getBytes(encoding);
//             String s2 = new String(bytes, encoding);
//             return (s2.equals(s));
//         } catch (Exception e) {
//             System.err.println("Errors found (StringUtils):\n\t" + e.toString());
//             if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
//                 e.printStackTrace(System.err);
//                 System.exit(1);
//             }
//             return false;
//         }
//     }
// 
//     public static int countOccurrencesOf(String source, char pattern) {
//         int count = 0;
//         if (source != null) {
//             int found = -1;
//             int start = 0;
// 
// 
//             while ((found = source.indexOf(pattern, start)) != -1) {
//                 start = found + 1;
//                 count++;
//             }
//             return count;
//         } else {
//             return 0;
//         }
//     }
// 
//     public static int countOccurrencesOf(String source, String pattern) {
//         int count = 0;
//         if (source != null) {
//             final int len = pattern.length();
//             int found = -1;
//             int start = 0;
// 
// 
//             while ((found = source.indexOf(pattern, start)) != -1) {
//                 start = found + len;
//                 count++;
//             }
//             return count;
//         } else {
//             return 0;
//         }
//     }
// 
//     public static String twoDecPosS(double d) {
//         Double a;
//         String twoDec;
//         int negative_inc = 0;
//         int decimal_pos = 0;
// 
//         a = (((int) Math.round((d) * 100.0)) / 100.0);
//         twoDec = a.toString();
// 
//         decimal_pos = twoDec.lastIndexOf('.');
//         if (decimal_pos == -1) {
//             twoDec += ".";
//             decimal_pos = twoDec.length();
//         }
//         twoDec += "00";
// 
//         twoDec = twoDec.substring(0, decimal_pos + 3);
// 
//         return twoDec;
//     }
// 
// public static <T> T[] concatArray(T[] first, T[] second) {
//   T[] result = Arrays.copyOf(first, first.length + second.length);
//   System.arraycopy(second, 0, result, first.length, second.length);
//   return result;
// }
// 
// 
// }


// Path: nlp-files/src/main/java/com/cognitionis/nlp_files/annotation_scorers/Score.java
import java.util.*;
import com.cognitionis.utils_basickit.StringUtils;

    }

    public double getAccuracyTokenLevel(String e) {
        return ((double) (tp.get(e) + tn.get(e)) / (tp.get(e) + tn.get(e) + fp.get(e) + fn.get(e)));
    }

    // IMPORTANT: ONLY FOR TEXT TYPE EVALUATION (SPAN) --> SPAN SLOPPY
    // NOT FOR ATTRIBUTES (IE, CLASS)
    public double getPrecisionRelaxed(String e) {
        return Precision(corr.get(e).doubleValue() + inco.get(e).doubleValue(), getACT(e));
    }

    public double getRecallRelaxed(String e) {
        return Recall(corr.get(e).doubleValue() + inco.get(e).doubleValue(), getPOS(e));
    }

    public double getF1Relaxed(String e) {
        double p = getPrecisionRelaxed(e);
        double r = getRecallRelaxed(e);
        return F1(p, r);
    }

    public void print() throws Exception {
        print("simple");
    }

    public void print(String option) throws Exception {
        //System.out.println("KEYFILE: " + this.keyfile);
        for (String e : elem_judgements.keySet()) {
            System.out.println("\t>" + e.toUpperCase() + "<  (POS=" + getPOS(e) + ",ACT=" + getACT(e) + "):\tPrecision=" + oneDecPos(getPrecision(e)) + "%\tRecall=" + oneDecPos(getRecall(e)) + "%\tF1=" + oneDecPos(getF1(e)) + "%\t- corr=" + corr.get(e) + ";inco=" + inco.get(e) + ";spur=" + spur.get(e) + ";miss=" + miss.get(e) + ";");
            System.out.println("\t  TempEval2(token level score)\tPrecision=" + StringUtils.twoDecPosS(getPrecisionTokenLevel(e)) + "\tRecall=" + StringUtils.twoDecPosS(getRecallTokenLevel(e)) + "\tF1=" + StringUtils.twoDecPosS(getF1TokenLevel(e)) + "  \t- accuracy=" + twoDecPos(getAccuracyTokenLevel(e)));