Result.java 2.07 KB
package pl.waw.ipipan.zil.core.scoreference.utils;

public class Result {

	private Double precisionNominator = 0.0;
	private Double precisionDenominator = 0.0;
	private Double recallNominator = 0.0;
	private Double recallDenominator = 0.0;

	private Double precision = null;
	private Double recall = null;
	private Double f1 = null;

	public Result(double precisionNominator, double precisionDenominator, double recallNominator,
			double recallDenominator) {
		this.precisionNominator = precisionNominator;
		this.precisionDenominator = precisionDenominator;
		this.recallNominator = recallNominator;
		this.recallDenominator = recallDenominator;
	}

	public Result() {
	}

	public Result(double p, double r) {
		this.precisionNominator = p;
		this.recallNominator = r;
		this.precisionDenominator = 1.0;
		this.recallDenominator = 1.0;
	}

	public Result(double avgP, double avgR, double avgF1) {
		this.precision = avgP;
		this.recall = avgR;
		this.f1 = avgF1;
	}

	public double getPrecision() {
		if (precision != null)
			return precision;
		return precisionNominator / precisionDenominator;
	}

	public double getRecall() {
		if (recall != null)
			return recall;
		return recallNominator / recallDenominator;
	}

	public String getPrecisionString() {
		return precisionNominator + "/" + precisionDenominator;
	}

	public String getRecallString() {
		return recallNominator + "/" + recallDenominator;
	}

	public double getF1() {
		if (f1 != null)
			return f1;
		double recall = getRecall();
		double precision = getPrecision();
		return (recall + precision) == 0 ? 0 : 2 * precision * recall / (recall + precision);
	}

	@Override
	public String toString() {
		String precLine = "Precision: " + getPrecision() + "\n";
		String recLine = "Recall:    " + getRecall() + "\n";
		return precLine + recLine + "F1:        " + getF1();
	}

	public void add(Result textResult) {
		this.precisionDenominator += textResult.precisionDenominator;
		this.precisionNominator += textResult.precisionNominator;
		this.recallDenominator += textResult.recallDenominator;
		this.recallNominator += textResult.recallNominator;
	}

}