Open main menu

lensowiki β

Trellis

       /**
        * Builds a Trellis over a sentence, by starting at the state State, and
        * advancing through all legal extensions of each state already in the
        * trellis.  You should not have to modify this code (or even read it,
        * really).
        */
       private Trellis<State> buildTrellis(List<String> sentence) {
           Trellis<State> trellis = new Trellis<State>();
           trellis.setStartState(State.getStartState());
           State stopState = State.getStopState(sentence.size() + 2);
           trellis.setStopState(stopState);
           Set<State> states = Collections.singleton(State.getStartState());
           for (int position = 0; position <= sentence.size() + 1; position++) {
               Set<State> nextStates = new HashSet<State>();
               for (State state : states) {
                   if (state.equals(stopState))
                       continue;
                   LocalTrigramContext localTrigramContext = new LocalTrigramContext(sentence, position, state.getPreviousPreviousTag(), state.getPreviousTag());
                   Counter<String> tagScores = localTrigramScorer.getLogScoreCounter(localTrigramContext);
                   boolean skipper = false;
                   if (tagScores.totalCount() != 0) skipper = true;
                   for (String tag : tagScores.keySet()) {
                       double score = tagScores.getCount(tag);
                       if (skipper && Math.abs(score) < 1) continue;
                       State nextState = state.getNextState(tag);
                       trellis.setTransitionCount(state, nextState, score);
                       nextStates.add(nextState);
                   }
               }
               //        System.out.println("States: "+nextStates);
               states = nextStates;
           }
           //System.out.println("trellis size: bt = " + trellis.btsize() + "; ft = " + trellis.ftsize());
           return trellis;
       }