// Copyright 2015 Thomas Müller
// This file is part of MarMoT, which is licensed under GPLv3.
package lemming.lemma.toutanova;
import java.util.Iterator;
import java.util.List;
import marmot.util.HashableIntArray;
public class Result implements Comparable<Result> {
private List<Integer> outputs_;
private List<Integer> inputs_;
private ToutanovaModel model_;
private double score_;
private String form_;
private HashableIntArray signature_;
public Result(ToutanovaModel model, List<Integer> outputs, List<Integer> inputs, String form, double score) {
model_ = model;
outputs_ = outputs;
inputs_ = inputs;
score_ = score;
form_ = form;
}
public Result(ToutanovaModel model, List<Integer> outputs, List<Integer> inputs, String form) {
this(model, outputs, inputs, form, Double.NEGATIVE_INFINITY);
}
public String getOutput() {
StringBuilder sb = new StringBuilder();
Iterator<Integer> output_iterator = outputs_.iterator();
Iterator<Integer> input_iterator = inputs_.iterator();
Integer input_start_index = 0;
while (output_iterator.hasNext()) {
assert input_iterator.hasNext();
Integer output_index = output_iterator.next();
Integer input_end_index = input_iterator.next();
String output_segment;
if (output_index == 0) {
output_segment = form_.substring(input_start_index, input_end_index);
} else {
output_segment = model_.getOutput(output_index);
}
sb.append(output_segment);
input_start_index = input_end_index;
}
assert !input_iterator.hasNext();
return sb.toString();
}
public List<Integer> getOutputs() {
return outputs_;
}
public List<Integer> getInputs() {
return inputs_;
}
public double getScore() {
return score_;
}
@Override
public int compareTo(Result result) {
return - Double.compare(score_, result.score_);
}
public Result setSignature(HashableIntArray signature) {
signature_ = signature;
return this;
}
public HashableIntArray getSignature() {
return signature_;
}
}