예전에... 한글로 변환이 안된 생타에서 영어를 입력했을 때 바로 한글로 변환하는 것을 dll로 만들어서 올렸었습니다...
그런데 어떤 분께서 사용하는 방법을 알려달라고 하시기에...

화면은 MFC로 했지만...
간단하게 console로 출력해 보겠습니다.

압축 파일을 받고나서 압축을 풀고 나면...

이렇게 3개의 파일이 있게 됩니다...
각 3개의 파일 용도는 아실거라 보고 진행합니다...

음... 기본 프로젝트를 생성하고...
헤더파일과 lib파일을 새로 만든 프로젝트와 같은 디렉토리 안에 복사를 합니다.

이렇게 하고...
코드는
#include 
using namespace std;

#include "AutoConvert.h"

int main(int argc, char** argv)
{
	char*	szText = "duddjfhTmsmswnd";
	int		nLen = strlen(szText);

	char*	szResult = EngToHanConvert(szText, nLen);

	cout << szResult << endl;

	return 0;
}

이렇게 입력을 하고나서
lib파일을 추가합니다.

이렇게 한 다음에 컴파일 하시고...
실행할 때 exe 실행파일이 있는 곳에 dll파일을 복사하시고... 실행하면 됩니다...
결과는

이런식으로 나오게 됩니다...
머... MFC에서나 Win32에서는 응용만 하시면 될거라 봅니다...
제 생각엔 헤더파일이랑 lib dll만 올리면 다들 사용하실 수 있다고 생각했는데... 그게 아녔나봅니다...
그럼 조금이라도 도움이 되셨기를...




검색엔진에 대해서 공부하다 보니...
영어에서 한글로 자동변환 해주는 것을 만들게 되었습니다...
네이버나 다음.. 영어로 글자를 치는데 자동으로 한글로 변환이 되서 검색 결과가 나오게 되죠
다른곳에서는 어떻게 될지 모르겠지만...
제 생각에는 "duddjfh clsmswnd" -> "영어로 치는중" 으로 바로 변환이 되어서 검색이 들어간다고 생각되는군요..
머 솔직히 검색엔진에 대해서 공부를 많이 한 것도 아니라서... ㅜㅜ
이렇게 될려면 자동으로 변환해 주는 것을 만들어야 겠다는 생각이 되서...
이런식으로...
C++의 Dll로 만들게 되었습니다...
머.. 영어 이외에 특수 문자가 입력 되면... 변환이 안되긴 하자만... ㅎㅎ
Dll과 header파일은 첨부합니다...


'Search Engine' 카테고리의 다른 글

[Search Engine] 영한 자동변환 사용...  (0) 2009.09.16
[search engine] 한글 초중종성 분리...  (1) 2009.05.24
Sphinx 에서 한글검색 하기...  (3) 2008.05.01
Sphinx Search Engine  (0) 2008.04.28
검색 엔진을 만들게 되면서...
한글 처리에 상당한 신경을 쓰게 되었습니다...
보통 검색 사이트에서 해주는 자동완성 검색들...
이 부분들은 대부분 한글들은 초중종성으로 분해되어 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표를 볼줄 아시는 분이라면...
이해가 빠르시리라 봅니다...

다음 글에서는 이렇게 분리한 한글을 다시 합치는 방법에 쓰도록 하겠습니다... :)


+ Recent posts