package org.maltparser.parser.history.kbest;
import org.maltparser.core.exception.MaltChainedException;
import org.maltparser.parser.history.action.SingleDecision;
/**
*
* @author Johan Hall
* @since 1.1
*
*/
public class ScoredKBestList extends KBestList {
public ScoredKBestList(SingleDecision action) {
this(-1, action);
}
public ScoredKBestList(Integer k, SingleDecision action) {
super(k, action);
}
@Override
protected void initKBestList() {
for (int i = 0; i < this.k; i++) {
kBestList.add(new ScoredCandidate());
}
}
public void add(int actionCode, float score) throws MaltChainedException {
if (k != -1 && addCandidateIndex >= k) {
return;
}
if (addCandidateIndex >= kBestList.size()) {
kBestList.add(new ScoredCandidate());
}
if (!(kBestList.get(addCandidateIndex) instanceof ScoredCandidate)) {
super.add(actionCode);
return;
}
final ScoredCandidate scand = (ScoredCandidate) kBestList.get(addCandidateIndex);
scand.setActionCode(actionCode);
scand.setScore(score);
if (addCandidateIndex == 0) {
if (decision instanceof SingleDecision) {
((SingleDecision) decision).addDecision(actionCode);
}
topCandidateIndex++;
}
addCandidateIndex++;
}
public void add(String symbol, float score) throws MaltChainedException {
if (decision instanceof SingleDecision) {
this.add(((SingleDecision) decision).getDecisionCode(symbol), score);
}
}
public float peekNextKBestScore() {
if (!(kBestList.get(addCandidateIndex) instanceof ScoredCandidate)) {
return Float.NaN;
}
if (addCandidateIndex != 0 && topCandidateIndex < addCandidateIndex && topCandidateIndex < kBestList.size()) {
return ((ScoredCandidate) kBestList.get(topCandidateIndex)).getScore();
}
return Float.NaN;
}
/*
* (non-Javadoc) @see java.lang.Object#toString()
*/
@Override
public String toString() {
return super.toString();
}
}