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 }