code: public List<IN> classifySentence(List<? extends HasWord> sentence) {
      List<IN> document = new ArrayList<IN>();
      int i = 0;
      for (HasWord word : sentence) {
        IN wi; // initialized below
        if (word instanceof CoreMap) {
          // copy all annotations! some are required later in
          // AbstractSequenceClassifier.classifyWithInlineXML
          // wi = (IN) new ArrayCoreMap((ArrayCoreMap) word);
          wi = tokenFactory.makeToken((IN) word);
        } else {
          wi = tokenFactory.makeToken();
          wi.set(CoreAnnotations.TextAnnotation.class, word.word());
          // wi.setWord(word.word());
        }
        wi.set(PositionAnnotation.class, Integer.toString(i));
        wi.set(AnswerAnnotation.class, backgroundSymbol());
        document.add(wi);
        i++;
      }
  
      // TODO get rid of objectbankwrapper
      ObjectBankWrapper<IN> wrapper = new ObjectBankWrapper<IN>(flags, null, knownLCWords);
      wrapper.processDocument(document);
  
      classify(document);
  
      return document;
    }
docs: Classify a List of IN. This method returns a new list of tokens, not
  the list of tokens passed in, and runs the new tokens through
  ObjectBankWrapper.  (Both these behaviors are different from that of the
  classify(List) method.
  
  @param sentence The List of IN to be classified.
  @return The classified List of IN, where the classifier output for
  each token is stored in its {@link AnswerAnnotation} field.