public boolean predict(SingleDecision decision) throws MaltChainedException { if (getGuide().getGuideMode() == ClassifierGuide.GuideMode.BATCH) { throw new GuideException("Can only predict during parsing. "); } else if (!(divideFeature.getFeatureValue() instanceof SingleFeatureValue)) { throw new GuideException("The divide feature does not have a single value. "); } // divideFeature.update(); if (divideModels != null && divideModels.containsKey( ((SingleFeatureValue) divideFeature.getFeatureValue()).getCode())) { return divideModels .get(((SingleFeatureValue) divideFeature.getFeatureValue()).getCode()) .predict(decision); } else if (masterModel != null && masterModel.getFrequency() > 0) { return masterModel.predict(decision); } else { getGuide() .getConfiguration() .getConfigLogger() .info( "Could not predict the next parser decision because there is " + "no divide or master model that covers the divide value '" + ((SingleFeatureValue) divideFeature.getFeatureValue()).getCode() + "', as default" + " class code '1' is used. "); decision.addDecision(1); // default prediction // classCodeTable.getEmptyKBestList().addKBestItem(1); } return true; }