001 package org.maltparser.parser.history.kbest;
002
003 import org.maltparser.core.exception.MaltChainedException;
004 import org.maltparser.parser.history.action.SingleDecision;
005 /**
006 *
007 * @author Johan Hall
008 * @since 1.1
009 **/
010 public class ScoredKBestList extends KBestList{
011
012 public ScoredKBestList(SingleDecision action) {
013 this(-1, action);
014 }
015
016 public ScoredKBestList(Integer k, SingleDecision action) {
017 super(k, action);
018 }
019
020 protected void initKBestList() {
021 for (int i=0; i < this.k; i++) {
022 kBestList.add(new ScoredCandidate());
023 }
024 }
025
026 public void add(int actionCode, float score) throws MaltChainedException {
027 if (k != -1 && addCandidateIndex >= k) { return; }
028 if (addCandidateIndex >= kBestList.size()) { kBestList.add(new ScoredCandidate()); }
029 if (!(kBestList.get(addCandidateIndex) instanceof ScoredCandidate)) {
030 super.add(actionCode);
031 return;
032 }
033 ScoredCandidate scand = (ScoredCandidate)kBestList.get(addCandidateIndex);
034 scand.setActionCode(actionCode);
035 scand.setScore(score);
036 if (addCandidateIndex == 0) {
037 if (decision instanceof SingleDecision) {
038 ((SingleDecision)decision).addDecision(actionCode);
039 }
040 topCandidateIndex++;
041 }
042 addCandidateIndex++;
043 }
044
045 public void add(String symbol, float score) throws MaltChainedException {
046 if (decision instanceof SingleDecision) {
047 this.add(((SingleDecision)decision).getDecisionCode(symbol), score);
048 }
049 }
050
051 public float peekNextKBestScore() {
052 if (!(kBestList.get(addCandidateIndex) instanceof ScoredCandidate)) {
053 return Float.NaN;
054 }
055 if (addCandidateIndex != 0 && topCandidateIndex < addCandidateIndex && topCandidateIndex < kBestList.size()) {
056 return ((ScoredCandidate)kBestList.get(topCandidateIndex)).getScore();
057 }
058 return Float.NaN;
059 }
060
061 /* (non-Javadoc)
062 * @see java.lang.Object#toString()
063 */
064 public String toString() {
065 return super.toString();
066 }
067 }