/* LanguageTool, a natural language style checker
* Copyright (C) 2014 Daniel Naber (http://www.danielnaber.de)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*/
package org.languagetool.dev.eval;
/**
* Helper to calculate F-measure value. See https://en.wikipedia.org/wiki/F1_score.
* @since 2.7
*/
public final class FMeasure {
private FMeasure() {
}
/**
* Calculates the F-measure with a beta of 0.5, so that precision
* weights higher than recall.
*/
public static double getWeightedFMeasure(float precision, float recall) {
return getFMeasure(precision, recall, 0.5f);
}
public static double getFMeasure(float precision, float recall, float beta) {
double betaSquared = Math.pow(beta, 2);
return (1 + betaSquared) * (precision * recall) / ((betaSquared * precision) + recall);
}
}