unicode와 한국어 간단하게 알아보기

1. unicode

 

다양한 언어처리에서 기본적으로 중요함

 

전 세계 모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자 set

 

문자마다 숫자 하나에 mapping?

 

 

 

character을 보면 알겠지만 웬만한 문자들이 전부 unicode에 대응되어 있음

 

위 그림에서 보면 U+는 unicode를 뜻하는 접두어이고 AC00은 16진수 code point이며 이것이 1개의 character에 대응됨

 

 

2. UTF-8

 

encoding이란 문자를 컴퓨터에서 저장하거나 처리할 수 있게 이진수로 바꿔주는 작업

 

현재 가장 많이 쓰이는 encoding방식 중 하나가 UTF-8

 

문자 타입에 따라 다른 길이의 byte를 할당했음

 

ASCII는 256개로 character를 제한하면서 영어의 알파벳은 모두 ASCII code로 전부 표현할 수 있음

 

그러니까 가장 많이 쓰이는 영어 알파벳은 1byte만 있으면 전부 표현할 수 있다는 것

 

UTF-8에서 사용하는 문자에 따라 할당하는 byte?

 

4byte에 이모지도 포함된다는 것이 재밌음

 

알파벳 뿐만 아니라 유럽계열 언어를 쓰고 싶으면 1byte를 추가해서 2byte로 표현

 

다른 언어를 쓰는 순간 그만큼 글자 수가 더 필요해서 더 많은 비트가 필요하기 때문이다.

 

필요할때마다 byte를 추가하여 효율적인 encoding이 가능하게 만들었다

 

UTF-8은 기본이 1byte를 사용하는거고(~4byte정도까지) UTF-16은 기본이 2byte부터 사용하는거(~4byte정도까지)

 

UTF-8,UTF-16,UTF-32 예시 그림

 

 

3. unicode를 다루는 방법?

 

python 3부터는 string type을 unicode 표준으로 사용한다고?

 

 

 

ord 함수는 문자를 unicode point로 변환하고

 

chr 함수는 unicode point를 문자로 변환해줌

 

 

 

위 그림을 보면 ‘A’같은 경우 1byte인 256이내의 65로 표현되고

 

한글을 표현하려면 3byte까지 가야하니까 ‘가’는 상당히 큰 숫자로 표현되어 있다는 것을 알 수 있다

 

3byte=24bit인데 2^24=16777216임..

 

 

4. unicode와 한국어

 

한국어는 한자 다음으로 unicode에서 많은 부분을 차지함

 

한글을 초성, 중성, 종성 각각 1글자로 보면 개수가 그렇게 많지는 않은데

 

초성+중성+종성으로 만든 예를 들면 간, 난, 단, 란, 락, … 등등이 모두 1글자로 본다면 글자수가 상당히 많아지는데

 

10000개가 넘어간다고함 이것을 완성형이라고 부름

 

완성형은 장점은 많은데 개수가 너무 많음

 

조합형은 조합하여 하나의 글자를 만들 수 있는 경우를 말하는데 직관적으로 len함수를 이용하면 완성형과 조합형의 차이를 볼수있다

 

 

 

 

완성형은 ‘가’를 1글자로 보고 len함수가 1을 출력하는데 조합형은 ‘가’를 ‘ㄱ’과 ‘ㅏ’의 합으로 보고 len함수가 2를 출력함

 

눈으로 볼 때는 ‘가’로 동일해서 완성형인지 조합형인지 볼려면 len으로 출력해봐야함

TAGS.

Comments