인공지능 및 데이터과학/자연어처리

한자 추출 및 인식하기

Steve Jang 2021. 7. 2. 10:59

보통 문자열을 인식하는 기능등은 많은 라이브러리나 정규표현식으로 쉽게 가져올 수 있지만 한자만 가지고 오는 방법은 별도의 작업을 수행해야 한다.

 

사실 한자라는 것이 무궁무진한 글자이고 한글과 다르게 무한대로 확장이 가능한 글자라서 컴퓨터 영역에서는 표현하기가 상당히 까다로운데 이럴땐 유니코드를 이용해서 추출하거나 인식할 수 있다.

 

한자 추출 및 인식하기


Java 소스 코드

public static void main( String[] args ) {
	String text = "가불有 大韓民國";
		
	for(int i = 0; i < text.length(); i++) {
		int charAt = (int)text.charAt(i);
			
		if((charAt >= '\u2E80' && charAt <= '\u2EFF') || 
			(charAt >= '\u3400' && charAt <= '\u4DB5') ||
			(charAt >= '\u4E00' && charAt <= '\u9FBF')) {
			System.out.println(text.charAt(i) + " -> 한자");
		} else {
			System.out.println(text.charAt(i) + " -> 그외");
		}
	}
}

 

아스키코드의 범위에 따라서 한자는 다양한 조합들이 만들어 질 수 있다.

구분  시작  끝
 한중일 부수 보충  2E80  2EFF
 한중일 통합 한자 확장 - A  3400  4DBF
 한중일 통합 한자  4E00  9FBF
 한중일 호환용 한자  F900  FAFF
 한중일 통합 한자 확장  20000  2A6DF
 한중일 호환용 한자 보충  2F800  2FA1F

 

이와 같이 다양한 한자 구분이 존재할 수 있으나, 국내에서 사용하는 한자의 경우 대다수는 "한중일 통합 한자" 영역안에서 뽑게 되어 있다.

 

위의 소스를 실행하면 아래와 같이 한자가 잘 인식되는 것을 알 수 있다.

가 -> 그외
불 -> 그외
有 -> 한자
  -> 그외
大 -> 한자
韓 -> 한자
民 -> 한자
國 -> 한자

 

이 포스팅에서는 Java 기반으로 설명했지만 아스키코드 혹은 유니코드를 가지고 인지를 하는 것이기 때문에 Python이나 C 등등 어느 언어로 개발을 하던간에 동일하다.