public static boolean ananlysisNJCM(AnalysisOutput o, List<AnalysisOutput> candidates) throws MorphException {
 
    int strlen = o.getStem().length();
    boolean success = false;
     
    if(strlen>3&&(o.getStem().endsWith("에서이")||o.getStem().endsWith("부터이"))) {
      o.addElist(o.getStem().substring(strlen-1));
      o.setJosa(o.getStem().substring(strlen-3,strlen-1));
      o.setStem(o.getStem().substring(0,strlen-3));
      success = true;
    }else if(strlen>5&&(o.getStem().endsWith("에서부터이"))) {
      o.addElist(o.getStem().substring(strlen-1));
      o.setJosa(o.getStem().substring(strlen-5,strlen-1));
      o.setStem(o.getStem().substring(0,strlen-5));
      success = true;
    }
    if(!success) return false;
    
    WordEntry entry = null;
    if(success&&(entry=DictionaryUtil.getAllNoun(o.getStem()))!=null) { 
      if(entry.getFeature(WordEntry.IDX_NOUN)=='2') {
        o.setCNoun(entry.getCompounds());
      }
      o.setScore(AnalysisOutput.SCORE_CORRECT);
    }
     
    o.setPatn(PatternConstants.PTN_NJCM);
    o.setPos(PatternConstants.POS_NOUN);  
    candidates.add(o);
     
    return true;
  }