2012.04.05 23:17

한글을 분리해서 검색하는 것을 만들려고 예전 자료를 찾다가 귀찮아서 그냥 만들어 버림....;;

먼저, 여기 를 보시고... (한글 조합형 유니코드 설명 - 위키자료 긁어온것)

일단, 중요한 부분은 

한글 유니코드 = [{(초성)×588}+{(중성)×28}+(종성)]+44032

이것이다. 초/중/종으로 분리 하려면? 빼고 나누고, 모듈러 하면 끝이다...ㅋㅋ 

(588 = 28 * 21, 저 식은 다시, [{(초성)×21+(중성)}×28}+(종성)]+44032 가 되겠다.)


	public static String Han_UnicodeNumberToString(int[] s) throws IllegalArgumentException {
		if (s.length != 3) throw new IllegalArgumentException();
		s[0] -= 0x1100;
		s[1] -= 0x1161;
		s[2] -= 0x11a8;
		char c = (char) ((((s[0] * 588) + s[1] * 28) + s[2]) + 44032);
		return String.valueOf(c);
	}

	public static int[] Han_CharacterToIMFUnicode(char s) {
		int[] result = new int[3];
		int a = s - 44032;
		result[0] = 0x1100 + ((a / 28) / 21);
		result[1] = 0x1161 + ((a / 21) % 21);
		result[2] = 0x11a8 + (a % 28);
		return result;
	}


뭔가......음;; 뭐 이렇다. (네이밍 센스가 그지같다;;;;)


첫번째 메소드는, 배열을 하나 받아오는데, 반드시 길이가 3이어야 한다. (예외가 발생하면, 인자가 잘못되었다고 에러를 뿜는다.)

받아온 배열을 가지고, 한글 유니코드를 만들어 준다. (초성+중성+종성 을 합쳐서.)


두번째는, 어떤 캐릭터(되도록 한글이어야 하는데,,,예외 처리는 다음 시간에..ㅋㅋ)를 받아온뒤, 이걸 초성/중성/종성으로 분리해 준다. 


여기서 헷갈릴 수도 있는 부분이 있는데, 바로 종성이다.

우리가 흔히 생각할때 초성의 ㄱ 과 종성의 ㄱ이 같다고 생각하지만, 유니코드에서는 그렇지 않다. 예를들면, 초성으로 쓰일수 있는 ㄱ의 유니코드값은, 4352(0x1100)인데 반해, 받침(종성)으로 쓰이는 ㄱ의 유니코드값은, 4536이다.

또, 초성으로 쓰일 수 있는 문자는 19개지만, 받침으로 쓰일 수 있는 문자는 28개이다. (받침으로 ㄳ, ㅄ 같은게 있다....//ㅄ은 벼ㅇ시ㄴ의 줄임말로 쓴게 아니니 오해 마시길..ㅋ)

그래서, 만약 위 문제를 생각안하고 쓰게 되면, ? 를 얻게 될것이다...ㅠ 이거 뭐 나중에 예외 처리를 통해서 구분을 할 수 있도록 나중에 또 포스팅 하기로..


마지막으로, 구현하려던게, 초성 검색인데, 위 메소드들을 이용하면 간단히(?) 구현할 수 있다.

1. 입력받는것은 "ㅌㅅㅌㄹ"의 초성만 온다.

2. 검색할 대상이 되는 것들은 모두 조합된 한글이다.

* 숫자나 영어는 생각하지않고 오로지 한글 부분에대해서만 검색을 한다고 가정한다.


먼저, 검색할 대상이 되는것을 첫번째 글자를 뜯어와 초성을 가져온다.


String name = "티스토리";

int i = Han_CharacterToIMFUnicode(name.charAt(0))[0];


그런뒤, 입력받은 것에서 첫번째 글자를 뜯어와 유니코드로 변환후(타입을 char로 바꾼뒤, int로 캐스팅 하거나) 항등비교를 하면 되겠다.

(아직 테스트 해보지 않아서 되는지는 모르겠지만 이런식으로 하면 되겠다.)


이번 포스팅은 이정도로 하고,.. 총총총

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 2
  1. Favicon of http://www.olympic2012.vn/ BlogIcon olympic 2012 2012.04.27 17:34 신고 address edit & del reply

    그레이트 사이트 제안 및 모든 입력, 매우 도움이 흥미있는 정보를 주셔서 감사합니다.

  2. Favicon of http://www.tintucolympic.com/ BlogIcon olympic london 2012 2012.04.27 17:39 신고 address edit & del reply

    이 사이트를 찾기 위해 나는 매우 기쁘게 생각했습니다. 나는이 위대한 읽어 주셔서 감사 드린다! 이것은 매우 유익한 posat, 그것은 좀 더 도움이됩니다.



티스토리 툴바