public static boolean analysisNSMJ(AnalysisOutput o, List<AnalysisOutput> candidates) throws MorphException {

    int idxVbSfix = VerbUtil.endsWithVerbSuffix(o.getStem());        
    if(idxVbSfix==-1) return false;
    
    o.setVsfx(o.getStem().substring(idxVbSfix));
    o.setStem(o.getStem().substring(0,idxVbSfix));
    o.setPatn(PatternConstants.PTN_NSMJ);
    o.setPos(PatternConstants.POS_NOUN);
      
    WordEntry entry = DictionaryUtil.getWordExceptVerb(o.getStem());

    if(entry!=null) {
      if(entry.getFeature(WordEntry.IDX_NOUN)=='0') return false;
      else if(o.getVsfx().equals("하")&&entry.getFeature(WordEntry.IDX_DOV)!='1') return false;
      else if(o.getVsfx().equals("되")&&entry.getFeature(WordEntry.IDX_BEV)!='1') return false;
      else if(o.getVsfx().equals("내")&&entry.getFeature(WordEntry.IDX_NE)!='1') return false;
      o.setScore(AnalysisOutput.SCORE_CORRECT); // '입니다'인 경우 인명 등 미등록어가 많이 발생되므로 분석성공으로 가정한다.      
    }else {
      o.setScore(AnalysisOutput.SCORE_ANALYSIS); // '입니다'인 경우 인명 등 미등록어가 많이 발생되므로 분석성공으로 가정한다.
    }
    
    candidates.add(o);
      
    return true;
  }