/*
* Copyright 2011-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.analysis.kr.utils;
import org.apache.lucene.analysis.kr.morph.PatternConstants;
import java.util.HashMap;
import java.util.Map;
/**
* 결합이 가능한 조건을 처리하는 클래스
*
* @author smlee
*/
@SuppressWarnings( "unchecked" )
public class ConstraintUtil {
private static final Map<String, String> hahes = new HashMap<String, String>();
static {
hahes.put("민족", "Y");
hahes.put("동서", "Y");
hahes.put("남북", "Y");
}
private static final Map<String, String> eomiPnouns = new HashMap<String, String>();
static {
eomiPnouns.put("ㄴ", "Y");
eomiPnouns.put("ㄹ", "Y");
eomiPnouns.put("ㅁ", "Y");
}
private static final Map<Integer, Integer> PTN_MLIST = new HashMap<Integer, Integer>();
static {
PTN_MLIST.put(PatternConstants.PTN_NSM, PatternConstants.PTN_NSM);
PTN_MLIST.put(PatternConstants.PTN_NSMXM, PatternConstants.PTN_NSMXM);
PTN_MLIST.put(PatternConstants.PTN_NJCM, PatternConstants.PTN_NJCM);
PTN_MLIST.put(PatternConstants.PTN_VM, PatternConstants.PTN_VM);
PTN_MLIST.put(PatternConstants.PTN_VMCM, PatternConstants.PTN_VMCM);
PTN_MLIST.put(PatternConstants.PTN_VMXM, PatternConstants.PTN_VMXM);
PTN_MLIST.put(PatternConstants.PTN_NVM, PatternConstants.PTN_NVM);
}
private static final Map<Integer, Integer> PTN_JLIST = new HashMap<Integer, Integer>();
static {
PTN_JLIST.put(PatternConstants.PTN_NJ, PatternConstants.PTN_NJ);
PTN_JLIST.put(PatternConstants.PTN_NSMJ, PatternConstants.PTN_NSMJ);
PTN_JLIST.put(PatternConstants.PTN_VMJ, PatternConstants.PTN_VMJ);
PTN_JLIST.put(PatternConstants.PTN_VMXMJ, PatternConstants.PTN_VMXMJ);
}
private static final Map<String, String> WORD_GUKS = new HashMap<String, String>();
static {
WORD_GUKS.put("날것", "Y");
WORD_GUKS.put("들것", "Y");
WORD_GUKS.put("별것", "Y");
WORD_GUKS.put("찰것", "Y");
WORD_GUKS.put("탈것", "Y");
WORD_GUKS.put("하잘것", "Y");
}
// 종성이 있는 음절과 연결될 수 없는 조사
private static Map<String, String> JOSA_TWO = new HashMap<String, String>();
static {
JOSA_TWO.put("가", "Y");
JOSA_TWO.put("는", "Y");
JOSA_TWO.put("다", "Y");
JOSA_TWO.put("나", "Y");
JOSA_TWO.put("니", "Y");
JOSA_TWO.put("고", "Y");
JOSA_TWO.put("라", "Y");
JOSA_TWO.put("와", "Y");
JOSA_TWO.put("랑", "Y");
JOSA_TWO.put("를", "Y");
JOSA_TWO.put("며", "Y");
JOSA_TWO.put("든", "Y");
JOSA_TWO.put("야", "Y");
JOSA_TWO.put("여", "Y");
}
// 종성이 없는 음절과 연결될 수 없는 조사
private static final Map<String, String> JOSA_THREE = new HashMap<String, String>();
static {
JOSA_THREE.put("과", "Y");
JOSA_THREE.put("은", "Y");
JOSA_THREE.put("아", "Y");
JOSA_THREE.put("으", "Y");
JOSA_THREE.put("은", "Y");
JOSA_THREE.put("을", "Y");
}
public static boolean canHaheCompound(String key) {
return hahes.get(key) != null;
}
/** 어미가 ㄴ,ㄹ,ㅁ 으로 끝나는지 조사한다. */
public static boolean isNLM(String eomi) {
if (eomi == null || eomi.length() == 0) return false;
if (eomiPnouns.get(eomi) != null) return true;
char[] chrs = MorphUtil.decompose(eomi.charAt(eomi.length() - 1));
if (chrs.length == 3 && eomiPnouns.get(Character.toString(chrs[2])) != null) return true;
return true;
}
public static boolean isEomiPhrase(int ptn) {
return PTN_MLIST.get(ptn) != null;
}
public static boolean isJosaNounPhrase(int ptn) {
return PTN_JLIST.get(ptn) != null;
}
public static boolean isJosaAdvPhrase(int ptn) {
return PatternConstants.PTN_ADVJ == ptn;
}
public static boolean isAdvPhrase(int ptn) {
return (PatternConstants.PTN_ADVJ == ptn || PatternConstants.PTN_AID == ptn);
}
public static boolean isTwoJosa(String josa) {
return (JOSA_TWO.get(josa) != null);
}
public static boolean isThreeJosa(String josa) {
return (JOSA_THREE.get(josa) != null);
}
}