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로 캐스팅 하거나) 항등비교를 하면 되겠다.

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


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

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, 그것은 좀 더 도움이됩니다.



티스토리 툴바