★개발자 노트/ActionScript 2.0

입력된 한글을 자음 모음 으로 나누기

abst 2013. 7. 15. 15:40
반응형

한글은 초성, 중성, 종성으로 이루어져 있다.

초성은 19개 : 'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'

중성은 21개 : 'ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ' ,'ㅕ', 'ㅖ' ,'ㅗ' ,'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ'

종성은 28개 : ' ', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'

종성의 첫번째는 공백으로 되있다.

한글 유니코드의 범위는 0xAC00 ~ 0xD7A3사이로 일정한 공식에 의해 초, 중, 종성을 분리, 결합 할 수 있다.


먼저 유니코드에서 한글 코드의 초, 중, 종성 분리는 다음과 같다.

초성 : (한글 유니코드 - 0xAC00) / (28*21)

중성 : ((한글 유니코드 - 0xAC00) % (28*21)) / 28

종성 : (한글 유니코드 - 0xAC00) % 28

위와 같은 계산을 거치면 초, 중, 종성의 index가 나온다.

예를 들어 '공' (0xACF5) 이라는 한글을 분리하면

초성 : 0

중성 : 8

종성 : 21

위와 같은 index를 얻어낼 수 있다.



----------------------------------------------------------------------------------------------------


var arr:Array = new Array;

function divide(str:String)

{

var unicode:Number = str.charCodeAt(0);

var num:Number = unicode - 0xAC00; 

var cho:Number =  Number(num / 588);

var jung:Number = Number(num / 28 ) % 21;

var jong:Number = num % 28 - 1;

if(jong>6 && jong<17)

{

jong+=1;

}

else if(jong>16 && jong<22)

{

jong+=2;   

}

else if(jong>21)

{

jong+=3;   

}

if(cho == 2 )

{

cho+=1;  

}

else if(cho>2 && cho<6)

{

cho+=3;   

}

else if(cho>5 && cho<9)

{

cho+=10;  

}

else if(cho>8)

{

cho+=11;   

}

//0xAC00 + (0 * (28*21)) + (8 * 28) + 21 = 0xACF5

trace(String.fromCharCode(0xAC00 + (cho * (28*21))))

arr.push(String.fromCharCode(cho+0x3131)); // 초성 자음 문자

arr.push(String.fromCharCode(jung+0x314f)); // 중성 모음 문자

  if(jong>-1)arr.push(String.fromCharCode(jong+0x3131)); // 종성 자음 문자

}


function divides(str:String) 

{

for(var i:Number=0; i<str.length; i++)

{

divide(str.charAt(i));

}

trace(arr);

}


divides("슭곰발");

반응형