초성/중성/종성을 분리하는 아이디어
글자 코드가 만들어진 순서를 살펴보면 한글 자모 문서의
초성,중성,종성을 순서대로 조합하면 한글 음절 문서의 순서와 일치한다. 결국가글자 시작위치를 0으로 생각하고 시작위치에서 한글 자모를 순서대로 조합하면 한글 음절을 완성할수 있다. 이 방법을 역순으로 하면 글자에서초성,중성,종성을 분리할 수 있다.
- 유니코드 기준 한글 음절 범위
0xAC00~0xD7A3이다. - 초성 범위 ㄱ(
0x1100)~ᄒ(0x1112) 총 19개 이다. (옛날 초성 제외) - 중성 범위 ㅏ(
0x1161)~ㅣ(0x1175) 총 21개 이다. (옛날 중성 제외) - 종성 범위 ᆨ(
0x11A8)~ᇂ(0x11C2) 27개와 없는것도 하나의 종성이라고 치면 총 28개 이다. (옛날 종성 제외) - 가(
0xAC00)를 시작으로588단위로 초성이 변경된다.까(0xAE4C) = 가(0xAC00) + 588 - 가(
0xAC00)를 시작으로28개 단위로 중성이 변경된다.객(0xAC1D) = 각(0xAC01) + 28 - 종성은 없을수도 있다.
초성 구하는 방법
- 초성의 순서를 구한다. 순서는 0부터 시작한다.
초성순서 = (글자코드 - 0xAC00) / 588 - 초성 코드표 시작은
0x1100부터이다. - 초성의 코드값을 구한다.
코드값 = 0x1100 + 초성순서
중성 구하는 방법
- 초성을 제외 시킨다.
초성을 제외한 값 = (글자코드 - 0xAC00) % 588 - 중성의 순서를 구한다. 순서는 0부터 시작한다.
중성순서 = 초성을 제외한 값 / 28 - 중성 코드표 시작은
0x1161부터이다. - 중성의 코드값을 구한다.
코드값 = 0x1161 + 중성순서
종성 구하는 방법
- 종성 순서를 구한다. 순서는 0부터 시작한다.
종성순서 = (글자코드 - 0xAC00) % 28 - 종성 코드표 시작은
0x11A8이지만 종성은 없을수도 있어서0x11A7에서 시작한다. - 종성의 코드값을 구한다.
코드값 = 0x11A7 + 종성순서 - 종성 코드값이
0x11A7이라면 종성이 존재하지 않는 것이다. (예: 아)
입력값(Hangul Compatibility Jamo) 자모 범위
- 입력값으로 사용할때는 한글호환성 자모 범위의 값으로 사용된다. 입력범위는
0x3130~0x318F이다. - 초성의 범위는 ㄱ(
0x3131) ~ ㅎ(0x314E) 이다. - 문제는 한글 자모 문서와 순서가 일치하지 않는다는 것에 있다. 결국 맵핑 테이블을 별도로 만들어야 한다.
마치며
초성검색을 하는 자바소스는 여기서 확인할 수 있다.
Leave a comment