public virtual int Compare(string o1, string o2) { if (o1.Equals(o2)) { return(0); } ConfusionMatrixLine t1 = confusionMatrix[o1]; ConfusionMatrixLine t2 = confusionMatrix[o2]; if (t1 == null || t2 == null) { if (t1 == null) { return(1); } else if (t2 == null) { return(-1); } return(0); } double r1 = t1.Accuracy; double r2 = t2.Accuracy; if (r1 == r2) { return(o1.CompareTo(o2)); } if (r2 > r1) { return(1); } return(-1); }
/// <summary> /// Includes a new evaluation data /// </summary> /// <param name="tok"> /// the evaluated token </param> /// <param name="ref"> /// the reference pos tag </param> /// <param name="pred"> /// the predicted pos tag </param> internal virtual void add(string tok, string @ref, string pred) { // token stats if (!tokAccuracies.ContainsKey(tok)) { tokAccuracies[tok] = new Mean(); tokOcurrencies[tok] = new Counter(); tokErrors[tok] = new Counter(); } tokOcurrencies[tok].increment(); // tag stats if (!tagOcurrencies.ContainsKey(@ref)) { tagOcurrencies[@ref] = new Counter(); tagErrors[@ref] = new Counter(); } tagOcurrencies[@ref].increment(); // updates general, token and tag error stats if (@ref.Equals(pred)) { tokAccuracies[tok].add(1); accuracy.add(1); } else { tokAccuracies[tok].add(0); tokErrors[tok].increment(); tagErrors[@ref].increment(); accuracy.add(0); } // populate confusion matrixes if (!generalConfusionMatrix.ContainsKey(@ref)) { generalConfusionMatrix[@ref] = new ConfusionMatrixLine(@ref); } generalConfusionMatrix[@ref].increment(pred); if (!tokenConfusionMatrix.ContainsKey(tok)) { tokenConfusionMatrix[tok] = new Dictionary <string, ConfusionMatrixLine>(); } if (!tokenConfusionMatrix[tok].ContainsKey(@ref)) { tokenConfusionMatrix[tok][@ref] = new ConfusionMatrixLine(@ref); } tokenConfusionMatrix[tok][@ref].increment(pred); }