[search engine] 한글 초중종성 분리...
Search Engine2009. 5. 24. 02:27
검색 엔진을 만들게 되면서...
한글 처리에 상당한 신경을 쓰게 되었습니다...
보통 검색 사이트에서 해주는 자동완성 검색들...
이 부분들은 대부분 한글들은 초중종성으로 분해되어 indexing이 되는 겁니다...
그럼 한글의 초중종성은 어떻게 분해를 하느냐...
한글은 기본적으로 2바이트의 multibyte를 쓰게 되죠... 영어는 1byte만 있어도 되지만...
이 부분을 처리하기 위해서는 single byte, multi-byte, unicode, utf-8에 대해서도 좀 알아야 할듯 싶기도 합니다...
서두가 좀 길긴 했습니다...
본론으로 들어가면...
한글을 자소 단위로 분리하기 위해서는 unicode로 된 한글이 필요하고...
그리고 분리하는 공식이 존재하게 되는겁니다.
Unicode는 한글 한 글자이고, 이 공식대로 하게 되면 초,중,종성의 index를 얻게 됩니다...
이런 index를 받게 되는거죠... 즉 순서...
음... 예제 코드를 드리자면
이런식으로 하면 됩니다...
기본적으로 unicode표를 볼줄 아시는 분이라면...
이해가 빠르시리라 봅니다...
다음 글에서는 이렇게 분리한 한글을 다시 합치는 방법에 쓰도록 하겠습니다... :)
한글 처리에 상당한 신경을 쓰게 되었습니다...
보통 검색 사이트에서 해주는 자동완성 검색들...
이 부분들은 대부분 한글들은 초중종성으로 분해되어 indexing이 되는 겁니다...
그럼 한글의 초중종성은 어떻게 분해를 하느냐...
한글은 기본적으로 2바이트의 multibyte를 쓰게 되죠... 영어는 1byte만 있어도 되지만...
이 부분을 처리하기 위해서는 single byte, multi-byte, unicode, utf-8에 대해서도 좀 알아야 할듯 싶기도 합니다...
서두가 좀 길긴 했습니다...
본론으로 들어가면...
한글을 자소 단위로 분리하기 위해서는 unicode로 된 한글이 필요하고...
그리고 분리하는 공식이 존재하게 되는겁니다.
•nChar = Unicode - 0xAC00;
•초성 index = nChar / (0x0015 * 0x001C);
•중성 index = (nChar / 0x001C) % 0x0015;
•종성 index = nChar % 0x001C;
Unicode는 한글 한 글자이고, 이 공식대로 하게 되면 초,중,종성의 index를 얻게 됩니다...
이런 index를 받게 되는거죠... 즉 순서...
음... 예제 코드를 드리자면
#include#include #include int main(void) { setlocale(LC_ALL, "Korean"); WORD in_char, in_cho, in_jung, in_jong; WORD result; printf("Input a letter : "); wscanf(L"%c", &in_char); // 초`중`종성 분해 in_char = in_char - 0xAC00; //in_cho = in_char / (21 * 28); in_cho = in_char / (0x0015 * 0x001C); //in_jung = (in_char / 28) % 21; in_jung = (in_char / 0x001C) % 0x0015; //in_jong = in_char % 28; in_jong = in_char % 0x001C; // 초`중`종성 print if ( in_jong == 0 ) wprintf(L"%c => %c + %c\n", in_char + 0xAC00, in_cho + 0x1100, in_jung + 0x1161); else wprintf(L"%c => %c + %c + %c\n", in_char + 0xAC00, in_cho + 0x1100, in_jung + 0x1161, in_jong + 0x11A7); }
이런식으로 하면 됩니다...
기본적으로 unicode표를 볼줄 아시는 분이라면...
이해가 빠르시리라 봅니다...
다음 글에서는 이렇게 분리한 한글을 다시 합치는 방법에 쓰도록 하겠습니다... :)
'Search Engine' 카테고리의 다른 글
[Search Engine] 영한 자동변환 사용... (0) | 2009.09.16 |
---|---|
[Search Engine] 영어에서 한글로 자동 변환... (3) | 2009.06.28 |
Sphinx 에서 한글검색 하기... (3) | 2008.05.01 |
Sphinx Search Engine (0) | 2008.04.28 |