/* * 마지막 음절이 명사형 접미사(등,상..)인지 조사한다. */ public static boolean confirmDNoun(AnalysisOutput output) throws MorphException { int strlen = output.getStem().length(); String d = output.getStem().substring(strlen - 1); if (!DNouns.contains(d)) return false; String s = output.getStem().substring(0, strlen - 1); output.setNsfx(d); output.setStem(s); WordEntry cnoun = DictionaryUtil.getAllNoun(s); if (cnoun != null) { if (cnoun.getFeature(WordEntry.IDX_NOUN) == '2') output.setCNoun(cnoun.getCompounds()); else output.setCNoun(Collections.EMPTY_LIST); output.setScore(AnalysisOutput.SCORE_CORRECT); } return true; }
/** * 복합명사에서 단위명사를 분리해낸다. 리스트의 가장 마지막에 위치한 단어가 최장단어이다. * * @param str 복합명사 * @param pos the analysing start point * @param o 분석결과 return 단위명사 리스트 * @throws MorphException throw exception */ private static List<WordEntry> findNouns(String str, int pos, AnalysisOutput o) throws MorphException { List<WordEntry> nList = new ArrayList<WordEntry>(); if (str.length() == 2 && DictionaryUtil.existSuffix(str.substring(0, 1)) && DNouns.contains(str.substring(1))) { o.setStem(o.getStem().substring(0, o.getStem().length() - 1)); o.setNsfx(str.substring(1)); nList.add(new WordEntry(str.substring(0, 1))); return nList; } else if (str.length() == 2 && DictionaryUtil.existSuffix(str.substring(0, 1)) && DictionaryUtil.existJosa(str.substring(1))) { return null; } if (pos >= 2 && DictionaryUtil.existJosa(str)) return null; if (str.length() == 1 && (DictionaryUtil.existSuffix(str) || DNouns.contains(str))) { nList.add(new WordEntry(str)); return nList; } for (int i = 1; i < str.length(); i++) { String sub = str.substring(0, i + 1); if (!DictionaryUtil.findWithPrefix(sub).hasNext()) break; WordEntry entry = DictionaryUtil.getAllNoun(sub); if (entry != null) { nList.add(entry); } } return nList; }