All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kss.rule.Rule Maven / Gradle / Ivy

The newest version!
package kss.rule;
/*
 * Korean Sentence Splitter
 * Split Korean text into sentences using heuristic algorithm.
 *
 * Copyright (C) 2021 Sang-ji Lee 
 * Copyright (C) 2021 Hyun-woong Ko  and Sang-Kil Park 
 * All rights reserved.
 *
 * This software may be modified and distributed under the terms
 * of the BSD license.  See the LICENSE file for details.
 */

import kss.base.enumerate.Id;
import kss.base.enumerate.Stats;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Rule {

    static List top500 = Arrays
        .asList("가", "간", "갈", "갉", "감", "갔", "갖", "같", "갚", "개", "걔", "걘", "거", "건", "걷", "걸", "검",
            "겪", "곤", "골", "곪", "곱", "괴",
            "구", "군", "굵", "굶", "굼", "굽", "궤", "귑", "귓", "규", "균", "긁", "긋", "기", "길", "긺", "깊",
            "까", "깎", "깐", "깖", "깜", "깠",
            "깨", "깬", "깼", "꺼", "꺾", "껐", "껴", "꼈", "꼬", "꼽", "꽂", "꽤", "꾸", "꾼", "꿇", "꿈", "꿔",
            "꿨", "꿰", "뀌", "끈", "끊", "끌",
            "끎", "끓", "끔", "끼", "낀", "낌", "나", "낚", "난", "날", "낡", "남", "났", "낮", "내", "낸", "냄",
            "냅", "냈", "넓", "넘", "넣", "녹",
            "논", "놀", "놂", "높", "놓", "놔", "놨", "누", "눈", "눕", "눠", "늘", "늙", "늚", "늦", "닦", "단",
            "닫", "달", "닮", "닳", "담", "답",
            "닿", "대", "댄", "댐", "댔", "던", "덜", "덞", "덥", "덮", "데", "덴", "뎀", "뎄", "돈", "돋", "돌",
            "돕", "돼", "됐", "되", "된", "됨",
            "두", "둔", "둠", "뒀", "든", "듣", "들", "듦", "듬", "딛", "딪", "따", "딴", "땀", "땄", "땋", "땠",
            "떠", "떨", "떴", "떼", "뗀", "뗌",
            "뛰", "뜀", "뜨", "뜯", "뜸", "띄", "띈", "띔", "띠", "띤", "막", "만", "많", "말", "맑", "맒", "맞",
            "맡", "매", "맨", "맴", "맵", "맸",
            "맺", "먹", "멀", "멂", "메", "멘", "멨", "몬", "몰", "몲", "묵", "묶", "묻", "물", "묽", "묾", "뭍",
            "뭘", "민", "믿", "밀", "밂", "밈",
            "밉", "박", "받", "밝", "밟", "배", "밴", "뱀", "뱄", "뱉", "번", "벌", "벎", "벗", "베", "벤", "보",
            "볶", "본", "봄", "봤", "봬", "뵀",
            "뵈", "뵌", "분", "붇", "불", "붉", "붊", "붓", "붙", "비", "빈", "빌", "빎", "빔", "빚", "빤", "빨",
            "빪", "빻", "빼", "뺀", "뺌", "뺐",
            "뻗", "뻤", "뼜", "뿜", "삔", "삠", "사", "산", "살", "삵", "삶", "삼", "샀", "새", "샌", "샘", "샛",
            "샜", "서", "섞", "선", "섰", "세",
            "셈", "셌", "속", "솎", "솟", "숨", "쉬", "쉰", "쉼", "쉽", "시", "식", "싣", "싫", "싶", "싸", "싼",
            "쌈", "쌌", "쌓", "쌔", "쌨", "써",
            "썩", "썰", "썲", "썼", "쎄", "쏘", "쏜", "쏟", "쏨", "쏴", "쐈", "쑤", "쑨", "쓰", "쓴", "쓸", "쓺",
            "씀", "씌", "씐", "씹", "안", "앉",
            "않", "알", "앎", "앓", "암", "약", "얇", "얕", "얘", "얜", "언", "얹", "얻", "얼", "없", "엎", "엮",
            "연", "열", "엶", "옅", "옌", "옛",
            "오", "온", "옭", "옮", "옳", "옴", "와", "왔", "왜", "운", "울", "읊", "일", "읽", "잃", "입", "있",
            "잊", "자", "작", "잔", "잡", "잤",
            "잦", "재", "잰", "잼", "쟀", "쟤", "쟨", "적", "전", "절", "젊", "접", "젓", "져", "졌", "존", "졸",
            "졺", "좁", "좇", "좋", "주", "죽",
            "준", "줌", "줍", "줘", "줬", "쥐", "쥠", "지", "진", "질", "집", "짓", "짖", "짙", "짜", "짧", "짰",
            "째", "짼", "쨌", "쩐", "쩔", "쪄",
            "쪘", "쫀", "쬐", "쬠", "찌", "찍", "찐", "찜", "찝", "찢", "차", "찬", "참", "찼", "찾", "채", "챈",
            "챘", "쳐", "쳤", "추", "춘", "춤",
            "춥", "춰", "췄", "치", "친", "침", "캐", "캠", "캤", "커", "컸", "켜", "켠", "켬", "켰", "크", "큼",
            "키", "킨", "킴", "타", "탄", "탐",
            "탔", "터", "턺", "텁", "텨", "튀", "튄", "튐", "트", "튼", "틂", "틈", "파", "팔", "팜", "팠", "패",
            "팼", "퍼", "펌", "펐", "펴", "편",
            "폄", "폈", "푼", "품", "피", "핀", "핌", "하", "핥", "함", "해", "했", "헌", "휘", "희");

    static List da = Arrays.asList("간", "같", "걔", "거", "건", "검", "곤", "곱",
        "구", "군", "굵", "길", "깊", "깐", "깠",
        "깬", "깼", "껐", "꼈", "꾼", "꿨",
        "끼", "낀", "난", "낡", "났", "낮", "낸", "냈", "넓",
        "논", "높", "놨", "눈", "늙", "늦", "단", "답",
        "닿", "댄", "댔", "덥", "덴", "뎄", "돈", "돼", "됐", "되", "된",
        "둔", "뒀", "딴", "땄", "땠", "떴", "뗀",
        "띈", "띤", "많", "맑", "맨", "맵", "맸",
        "멀", "멘", "멨", "몬", "묽", "민",
        "밉", "밝", "밴", "뱄", "번", "벤", "본", "봤", "뵀",
        "뵌", "분", "붉", "비", "빈", "빤", "뺀", "뺐",
        "뻤", "뼜", "삔", "산", "샀", "샌", "샜", "선", "섰",
        "셌", "쉰", "쉽", "시", "싶", "싼", "쌈", "쌌", "쌔", "쌨", "써",
        "썼", "쏜", "쐈", "쑨", "쓴",
        "않", "얇", "얕", "얘", "언", "없", "연", "옅",
        "옳", "왔", "운", "있", "작", "잔", "잤",
        "잦", "잰", "쟀", "쟤", "적", "전", "젊", "졌", "존", "좁", "좋",
        "준", "줍", "줬", "진", "짙", "짜", "짧", "짰", "짼", "쨌", "쩐",
        "쪘", "쫀", "찐", "차", "찬", "찼", "챈", "챘", "쳤", "춘",
        "춥", "췄", "친", "캤", "컸", "켠", "켰", "크", "킨", "탄",
        "탔", "튀", "튄", "트", "튼", "팠", "팼", "펐", "편",
        "폈", "푼", "핀", "했", "희");

    static List yo = Arrays.asList("가", "감", "개", "걔", "걘", "괴",
        "까",
        "깨", "껴", "꿈", "꿔", "꿰",
        "끔", "낌", "나", "남", "내", "냄",
        "놂", "놔", "눠", "늚",
        "대", "댐", "데", "돼", "되", "됨",
        "둠", "듦", "듬", "따", "땀", "떠", "떼",
        "뜀", "뜸", "띔", "매",
        "메",
        "배", "베", "봬",
        "뵈", "빎", "빔", "빪", "뺌",
        "삠", "사", "삶", "삼", "새", "서", "세",
        "셈", "싸", "쌈", "쌔", "써",
        "썲", "쎄", "쏨", "쏴", "쓺", "씀",
        "앎", "암", "얘", "얜", "엶",
        "옮", "옴", "와", "왜", "자",
        "재", "잼", "쟤", "쟨", "젊", "져", "졺",
        "줌", "줘", "짜", "째", "쪄",
        "쬠", "찜", "차", "채", "쳐", "춤",
        "춰", "캐", "커", "켜", "켬", "킴", "타", "탐",
        "터", "텨", "튐", "틈", "팜", "패", "퍼", "펌", "펴",
        "폄", "품", "핌", "함", "해");

    static List jyo = Arrays
        .asList("가", "갉", "갔", "갖", "같", "갚", "개", "걔", "걷", "걸", "검", "겪", "골", "곪", "곱", "괴",
            "굵", "굶", "굼", "굽", "긁", "긋", "길", "깊", "깎", "깠",
            "깨", "깼", "꺾", "껐", "꼈", "꼽", "꽂", "꾸", "꿇", "꿨", "꿰", "뀌", "끊", "끌",
            "끓", "끼", "낚", "날", "낡", "남", "났", "낮", "내", "냈", "넓", "넘", "넣", "녹",
            "놀", "높", "놓", "놨", "누", "눕", "늙", "늦", "닦", "닫", "달", "닮", "닳", "답",
            "닿", "대", "댔", "덜", "덥", "덮", "데", "뎄", "돋", "돌", "돕", "돼", "됐", "되",
            "두", "뒀", "듣", "들", "딛", "딪", "따", "땄", "땋", "땠", "떨", "떴", "떼",
            "뛰", "뜨", "뜯", "띄", "띠", "막", "많", "말", "맑", "맞", "맡", "매", "맵", "맸",
            "맺", "먹", "멀", "메", "멨", "몰", "묵", "묶", "묻", "묽", "뭍", "믿", "밀",
            "밉", "박", "받", "밝", "밟", "배", "뱄", "뱉", "벌", "벗", "베", "보", "볶", "봤", "봬", "뵀",
            "뵈", "붇", "불", "붉", "붓", "붙", "비", "빌", "빚", "빨", "빻", "빼", "뺐",
            "뻗", "뻤", "뼜", "사", "살", "삵", "샀", "새", "샌", "샛", "샜", "서", "섞", "섰", "세",
            "셌", "속", "솎", "솟", "숨", "쉬", "쉽", "시", "식", "싣", "싫", "싶", "싸", "쌌", "쌓", "쌔", "쌨",
            "써",
            "썩", "썰", "썼", "쎄", "쏘", "쏟", "쏴", "쐈", "쑤", "쓰", "쓸", "씌", "씹", "앉",
            "않", "알", "앓", "약", "얇", "얕", "얘", "얹", "얻", "얼", "없", "엎", "엮", "열", "옅", "옛",
            "오", "온", "옭", "옮", "옳", "와", "왔", "울", "읊", "일", "읽", "잃", "입", "있", "잊", "자", "작",
            "잡", "잤",
            "잦", "재", "잰", "쟀", "쟤", "적", "절", "젊", "접", "젓", "졌", "졸", "좁", "좇", "좋", "주", "죽",
            "줍", "줬", "쥐", "지", "질", "집", "짓", "짖", "짙", "짜", "짧", "짰", "째", "쨌", "쩔",
            "쪘", "쬐", "찌", "찍", "찐", "찝", "찢", "차", "찼", "찾", "채", "챘", "쳐", "쳤", "추",
            "춥", "춰", "췄", "치", "캐", "캤", "커", "컸", "켜", "켠", "켰", "크", "키", "타",
            "탔", "터", "튀", "트", "파", "팔", "팠", "패", "팼", "펐", "펴",
            "폈", "피", "하", "핥", "했", "휘", "희");

    static List ham = Arrays
        .asList("리", "절", "용", "편", "륭", "듯", "야", "족", "못", "끗", "안", "천",
            "정", "각", "실", "소", "끔", "분", "이", "약");

    static List um = Arrays
        .asList("았", "었", "했", "없", "좋", "있", "웠", "였", "않", "같", "많", "겠", "찮", "났", "좁", "작", "싶",
            "셨", "졌", "넓");

    static List before = Arrays.asList(
        //조사
        "이", "가", "에서", "은", "는", "을", "를", "도", "에", "게", "께", "한테", "로", "써",
        "와", "과", "랑", "까지", "부터", "뿐", "만", "따라", "토록", "도록", "든지", "던지", "란",
        "만큼", "만치", "때",

        //부사
        "너무", "잘", "못", "빨리", "매우", "몹시", "별로", "아까", "내일", "일찍", "금방",
        "이미", "이리", "저리", "아니", "과연", "설마", "제발", "정말", "결코", "가득", "히",

        //대명사
        "나", "저", "우리", "저희", "너", "너희", "당신", "그대", "그", "그녀", "분", "놈", "거", "것",
        "여기", "저기", "쪽", "곳", "님"
    );
    public static Map daValue = new HashMap<>() {{
        put("갔", Id.PREV.getValue());
        put("간", Id.PREV.getValue());
        put("겠", Id.PREV.getValue());
        put("겼", Id.PREV.getValue());
        put("같", Id.PREV.getValue());
        put("놨", Id.PREV.getValue());
        put("녔", Id.PREV.getValue());
        put("니", Id.PREV.getValue());
        put("논", Id.PREV.getValue());
        put("낸", Id.PREV.getValue());
        put("냈", Id.PREV.getValue());
        put("뒀", Id.PREV.getValue());
        put("때", Id.PREV.getValue());
        put("랐", Id.PREV.getValue());
        put("럽", Id.PREV.getValue());
        put("렵", Id.PREV.getValue());
        put("렸", Id.PREV.getValue());
        put("뤘", Id.PREV.getValue());
        put("몄", Id.PREV.getValue());
        put("밌", Id.PREV.getValue());
        put("볐", Id.PREV.getValue());
        put("볍", Id.PREV.getValue());
        put("봤", Id.PREV.getValue());
        put("섰", Id.PREV.getValue());
        put("샜", Id.PREV.getValue());
        put("셨", Id.PREV.getValue());
        put("싼", Id.PREV.getValue());
        put("싸", Id.PREV.getValue());
        put("않", Id.PREV.getValue());
        put("았", Id.PREV.getValue());
        put("없", Id.PREV.getValue());
        put("었", Id.PREV.getValue());
        put("였", Id.PREV.getValue());
        put("온", Id.PREV.getValue());
        put("웠", Id.PREV.getValue());
        put("이", Id.PREV.getValue());
        put("인", Id.PREV.getValue());
        put("있", Id.PREV.getValue());
        put("진", Id.PREV.getValue());
        put("졌", Id.PREV.getValue());
        put("쳤", Id.PREV.getValue());
        put("췄", Id.PREV.getValue());
        put("챘", Id.PREV.getValue());
        put("켰", Id.PREV.getValue());
        put("켠", Id.PREV.getValue());
        put("팠", Id.PREV.getValue());
        put("펐", Id.PREV.getValue());
        put("폈", Id.PREV.getValue());
        put("했", Id.PREV.getValue());
        put("혔", Id.PREV.getValue());
        put("한", Id.NEXT.getValue());
        put("가", Id.NEXT.getValue());
        put("고", Id.NEXT.getValue() | Id.NEXT2.getValue());
        put("는", Id.NEXT.getValue() | Id.NEXT2.getValue());
        put("라", Id.NEXT.getValue());
        put("시", Id.NEXT.getValue());
        put("등", Id.NEXT.getValue());
        put("던", Id.NEXT.getValue());
        put("든", Id.NEXT.getValue());
        put("지", Id.NEXT1.getValue() | Id.NEXT2.getValue());
        put("를", Id.NEXT.getValue());
        put("운", Id.NEXT.getValue());  //~다운
        put("만", Id.NEXT.getValue());
        put("며", Id.NEXT.getValue() | Id.NEXT2.getValue());
        put("면", Id.NEXT.getValue() | Id.NEXT1.getValue() | Id.NEXT2.getValue());
        put("서", Id.NEXT2.getValue());
        put("싶", Id.PREV.getValue() | Id.NEXT.getValue());
        put("죠", Id.NEXT.getValue());
        put("죵", Id.NEXT.getValue());
        put("쥬", Id.NEXT.getValue());
        put("하", Id.NEXT1.getValue());
        put("해", Id.NEXT1.getValue());
        put("도", Id.NEXT2.getValue());
        put("", Id.NONE.getValue());
    }};
    public static Map yoValue = new HashMap<>() {{
        put("겨", Id.PREV.getValue());
        put("거", Id.PREV.getValue());
        put("구", Id.PREV.getValue());
        put("군", Id.PREV.getValue());
        put("걸", Id.PREV.getValue());
        put("까", Id.PREV.getValue());
        put("께", Id.PREV.getValue());
        put("껴", Id.PREV.getValue());
        put("네", Id.PREV.getValue());
        put("나", Id.PREV.getValue());
        put("니", Id.PREV.getValue());
        put("데", Id.PREV.getValue());
        put("든", Id.PREV.getValue());
        put("려", Id.PREV.getValue());
        put("서", Id.PREV.getValue());
        put("세", Id.PREV.getValue());
        put("아", Id.PREV.getValue());
        put("어", Id.PREV.getValue());
        put("워", Id.PREV.getValue());
        put("에", Id.PREV.getValue());
        put("예", Id.PREV.getValue());
        put("을", Id.PREV.getValue());
        put("져", Id.PREV.getValue());
        put("줘", Id.PREV.getValue());
        put("지", Id.PREV.getValue());
        put("춰", Id.PREV.getValue());
        put("해", Id.PREV.getValue());
        put("고", Id.NEXT2.getValue());
        put("는", Id.NEXT.getValue());
        put("라", Id.NEXT1.getValue());
        put("등", Id.NEXT.getValue());
        put("를", Id.NEXT.getValue());
        put("즘", Id.NEXT.getValue());
        put("소", Id.NEXT.getValue());
        put("며", Id.NEXT2.getValue());
        put("면", Id.PREV.getValue() | Id.NEXT2.getValue());
        put("하", Id.NEXT1.getValue());
        put("", Id.NONE.getValue());
    }};
    public static Map jyoValue = new HashMap<>() {{
        put("거", Id.PREV.getValue());
        put("가", Id.PREV.getValue());
        put("갔", Id.PREV.getValue());
        put("겠", Id.PREV.getValue());
        put("같", Id.PREV.getValue());
        put("놨", Id.PREV.getValue());
        put("녔", Id.PREV.getValue());
        put("냈", Id.PREV.getValue());
        put("니", Id.PREV.getValue());
        put("뒀", Id.PREV.getValue());
        put("았", Id.PREV.getValue());
        put("르", Id.PREV.getValue());
        put("랐", Id.PREV.getValue());
        put("럽", Id.PREV.getValue());
        put("렵", Id.PREV.getValue());
        put("렸", Id.PREV.getValue());
        put("맞", Id.PREV.getValue());
        put("몄", Id.PREV.getValue());
        put("밌", Id.PREV.getValue());
        put("볐", Id.PREV.getValue());
        put("볍", Id.PREV.getValue());
        put("봤", Id.PREV.getValue());
        put("서", Id.PREV.getValue());
        put("섰", Id.PREV.getValue());
        put("셨", Id.PREV.getValue());
        put("샜", Id.PREV.getValue());
        put("않", Id.PREV.getValue());
        put("없", Id.PREV.getValue());
        put("었", Id.PREV.getValue());
        put("였", Id.PREV.getValue());
        put("이", Id.PREV.getValue());
        put("졌", Id.PREV.getValue());
        put("쳤", Id.PREV.getValue());
        put("챘", Id.PREV.getValue());
        put("켰", Id.PREV.getValue());
        put("팠", Id.PREV.getValue());
        put("폈", Id.PREV.getValue());
        put("하", Id.PREV.getValue());
        put("했", Id.PREV.getValue());
        put("혔", Id.PREV.getValue());
        put("고", Id.PREV.getValue() | Id.NEXT2.getValue());
        put("는", Id.NEXT.getValue());
        put("등", Id.NEXT.getValue());
        put("라", Id.NEXT1.getValue());
        put("를", Id.NEXT.getValue());
        put("며", Id.NEXT2.getValue());
        put("면", Id.PREV.getValue() | Id.NEXT2.getValue());
        put("", Id.NONE.getValue());
    }};
    public static Map umValue = new HashMap<>() {{
        put("았", Id.PREV.getValue());
        put("없", Id.PREV.getValue());
        put("었", Id.PREV.getValue());
        put("했", Id.PREV.getValue());
        put("있", Id.PREV.getValue());
        put("좋", Id.PREV.getValue());
        put("웠", Id.PREV.getValue());
        put("였", Id.PREV.getValue());
        put("않", Id.PREV.getValue());
        put("같", Id.PREV.getValue());
        put("겠", Id.PREV.getValue());
        put("봤", Id.PREV.getValue());
        put("밌", Id.PREV.getValue());
        put("많", Id.PREV.getValue());
        put("찮", Id.PREV.getValue());
        put("났", Id.PREV.getValue());
        put("처", Id.PREV.getValue());
        put("렸", Id.PREV.getValue());
        put("졌", Id.PREV.getValue());
        put("싶", Id.PREV.getValue());
        put("이", Id.NEXT.getValue());
        put("에", Id.NEXT.getValue());
        put("악", Id.NEXT.getValue());
        put("식", Id.NEXT.getValue());
        put("을", Id.NEXT.getValue());
        put("으", Id.NEXT.getValue());
        put("부", Id.NEXT.getValue());
        put("도", Id.NEXT.getValue());
        put("은", Id.NEXT.getValue());
        put("엔", Id.NEXT.getValue());
        put("날", Id.NEXT.getValue());
        put("료", Id.NEXT.getValue());
        put("과", Id.NEXT.getValue());
        put("의", Id.NEXT.getValue());
        put("만", Id.NEXT.getValue());
        put("보", Id.NEXT.getValue());
        put("인", Id.NEXT.getValue());
        put("속", Id.NEXT.getValue());
        put("", Id.NONE.getValue());
    }};
    public static Map hamValue = new HashMap<>() {{
        put("루", Id.PREV.getValue());
        put("편", Id.PREV.getValue());
        put("절", Id.PREV.getValue());
        put("포", Id.PREV.getValue());
        put("안", Id.PREV.getValue());
        put("못", Id.PREV.getValue());
        put("만", Id.PREV.getValue() | Id.NEXT.getValue());
        put("족", Id.PREV.getValue());
        put("야", Id.PREV.getValue());
        put("치", Id.PREV.getValue());
        put("결", Id.PREV.getValue());
        put("수", Id.PREV.getValue());
        put("각", Id.PREV.getValue());
        put("끗", Id.PREV.getValue());
        put("리", Id.PREV.getValue());
        put("답", Id.PREV.getValue());
        put("중", Id.PREV.getValue());
        put("용", Id.PREV.getValue());
        put("심", Id.PREV.getValue());
        put("쾌", Id.PREV.getValue());
        put("께", Id.NEXT.getValue());
        put("이", Id.NEXT.getValue());
        put("을", Id.NEXT.getValue());
        put("과", Id.NEXT.getValue());
        put("에", Id.NEXT.getValue());
        put("은", Id.NEXT.getValue());
        put("의", Id.NEXT.getValue());
        put("도", Id.NEXT.getValue());
        put("으", Id.NEXT.getValue());
        put("되", Id.NEXT.getValue());
        put("없", Id.NEXT.getValue());
        put("부", Id.NEXT.getValue());
        put("된", Id.NEXT.getValue());
        put("정", Id.NEXT.getValue());
        put("해", Id.NEXT.getValue());
        put("한", Id.NEXT.getValue());
        put("까", Id.NEXT.getValue());
        put("축", Id.NEXT.getValue());
        put("", Id.NONE.getValue());
    }};

    public static Map sbValue = new HashMap<>() {{
        put("것", Id.PREV.getValue());
        put("가", Id.PREV.getValue());
        put("까", Id.PREV.getValue());
        put("거", Id.PREV.getValue());
        put("게", Id.PREV.getValue());
        put("걸", Id.PREV.getValue());
        put("껄", Id.PREV.getValue());
        put("나", Id.PREV.getValue());
        put("니", Id.PREV.getValue());
        put("네", Id.PREV.getValue());
        put("다", Id.PREV.getValue());
        put("쎄", Id.PREV.getValue());
        put("래", Id.PREV.getValue());
        put("데", Id.PREV.getValue());
        put("지", Id.PREV.getValue());
        put("든", Id.PREV.getValue());
        put("덩", Id.PREV.getValue());
        put("등", Id.PREV.getValue());
        put("랴", Id.PREV.getValue());
        put("마", Id.PREV.getValue());
        put("봐", Id.PREV.getValue());
        put("서", Id.PREV.getValue());
        put("아", Id.PREV.getValue());
        put("어", Id.PREV.getValue());
        put("오", Id.PREV.getValue());
        put("요", Id.PREV.getValue());
        put("을", Id.PREV.getValue());
        put("자", Id.PREV.getValue());
        put("죠", Id.PREV.getValue());
        put("고", Id.NEXT2.getValue());
        put("는", Id.NEXT.getValue());
        put("라", Id.PREV.getValue() | Id.NEXT.getValue());
        put("며", Id.NEXT2.getValue());
        put("면", Id.NEXT2.getValue());
        put("하", Id.NEXT1.getValue());
        put("", Id.NONE.getValue());
    }};
    public static Map commonValue = new HashMap<>() {{
        put("ㄱ", Id.CONT.getValue());
        put("ㄴ", Id.CONT.getValue());
        put("ㄷ", Id.CONT.getValue());
        put("ㄹ", Id.CONT.getValue());
        put("ㅁ", Id.CONT.getValue());
        put("ㅂ", Id.CONT.getValue());
        put("ㅅ", Id.CONT.getValue());
        put("ㅇ", Id.CONT.getValue());
        put("ㅈ", Id.CONT.getValue());
        put("ㅊ", Id.CONT.getValue());
        put("ㅋ", Id.CONT.getValue());
        put("ㅌ", Id.CONT.getValue());
        put("ㅍ", Id.CONT.getValue());
        put("ㅎ", Id.CONT.getValue());
        put("ㅏ", Id.CONT.getValue());
        put("ㅑ", Id.CONT.getValue());
        put("ㅓ", Id.CONT.getValue());
        put("ㅕ", Id.CONT.getValue());
        put("ㅗ", Id.CONT.getValue());
        put("ㅛ", Id.CONT.getValue());
        put("ㅜ", Id.CONT.getValue());
        put("ㅠ", Id.CONT.getValue());
        put("ㅡ", Id.CONT.getValue());
        put("ㅣ", Id.CONT.getValue());
        put("^", Id.CONT.getValue());
        put(";", Id.CONT.getValue());
        put(".", Id.CONT.getValue());
        put("?", Id.CONT.getValue());
        put("!", Id.CONT.getValue());
        put("~", Id.CONT.getValue());
        put("…", Id.CONT.getValue());
        put(",", Id.CONT.getValue());
        put("", Id.NONE.getValue());
    }};
    public static Map> table = new HashMap<>() {{
        put(Stats.DEFAULT.getValue(), new HashMap<>());
        put(Stats.DA.getValue(), daValue);
        put(Stats.YO.getValue(), yoValue);
        put(Stats.JYO.getValue(), jyoValue);
        put(Stats.UM.getValue(), umValue);
        put(Stats.HAM.getValue(), hamValue);
        put(Stats.SB.getValue(), sbValue);
        put(Stats.COMMON.getValue(), commonValue);
    }};

    public static List postProcessingDa = setPostProcessingDa();
    public static List postProcessingYo = setPostProcessingYo();
    public static List postProcessingJyo = setPostProcessingJyo();
    public static List postProcessingHam = setPostProcessingHam();
    public static List postProcessingUm = setPostProcessingUm();


    private static ArrayList setPostProcessingDa() {
        Set set = new HashSet<>();
        for (String i : da) {
            for (String j : before) {
                set.add(String.format("%s %s다", j, i));
            }
        }
        return new ArrayList<>(set);
    }

    private static List setPostProcessingYo() {
        Set set = new HashSet<>();
        for (String i : yo) {
            for (String j : before) {
                set.add(String.format("%s %s요", j, i));
            }
        }
        return new ArrayList<>(set);
    }

    private static List setPostProcessingJyo() {
        Set set = new HashSet<>();
        for (String i : jyo) {
            for (String j : before) {
                set.add(String.format("%s %s죠", j, i));
            }
        }
        return new ArrayList<>(set);
    }

    private static List setPostProcessingHam() {
        Set set = new HashSet<>();
        for (String i : ham) {
            for (String j : before) {
                set.add(String.format("%s %s함", j, i));
            }
        }
        return new ArrayList<>(set);
    }

    private static List setPostProcessingUm() {
        Set set = new HashSet<>();
        for (String i : um) {
            for (String j : before) {
                set.add(String.format("%s %s음", j, i));
            }
        }
        return new ArrayList<>(set);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy