이 글에서는 파이썬 3.x(그 이하 버전 포함)에서 제공하는 unicodedata 모듈, 즉 유니코드 문자 데이터베이스에 대해 알아보겠습니다.
유니코드 문자 데이터베이스(Unicode Character Database) 모듈은 각 문자에 대한 유니코드의 모든 속성 정보를 제공합니다. 이 모듈에서 사용하는 함수와 상수 이름은 유니코드 표준 명세(Unicode Standard Annex #44)에 정의된 것과 동일하기 때문에, 공식 문서를 참고할 때도 혼란이 없습니다.
지금부터 이 모듈에서 자주 활용되는 주요 함수들을 하나씩 살펴보겠습니다.
1. lookup() – 이름으로 문자 찾기
lookup 함수는 입력으로 전달된 문자의 공식 이름에 해당하는 실제 유니코드 기호를 반환합니다. 예를 들어 'HYPHEN'이라는 이름을 넘기면 하이픈(-) 문자를 얻을 수 있습니다.
예제 코드
import unicodedata
print(unicodedata.lookup('HYPHEN'))
print(unicodedata.lookup('HIGH VOLTAGE SIGN'))
print(unicodedata.lookup('NO ENTRY'))
실행 결과
-
⚡
🚫
만약 해당 이름의 문자가 존재하지 않으면 KeyError 예외가 발생하므로, 실무에서는 try-except 문으로 감싸 처리하는 것이 안전합니다.
2. name() – 문자의 이름 조회
name 함수는 lookup과 반대로, 입력으로 전달된 기호에 대응하는 공식 이름을 반환합니다. 디버깅이나 로그 출력 시 특수문자가 무엇인지 확인할 때 매우 유용합니다.
예제 코드
import unicodedata
print(unicodedata.name(u'&'))
print(unicodedata.name(u'@'))
print(unicodedata.name(u'`'))
실행 결과
AMPERSAND
COMMERCIAL AT
GRAVE ACCENT
3. category() – 문자의 범주 분류
category 함수는 입력된 기호·문자·숫자가 속한 유니코드 일반 범주(General Category)를 판별해줍니다. 텍스트 전처리나 유효성 검사 로직을 작성할 때 자주 사용됩니다.
예제 코드
import unicodedata
print(unicodedata.category(u'&'))
print(unicodedata.category(u'1'))
print(unicodedata.category(u'a'))
실행 결과
Po
Nd
Ll
각 코드의 의미는 다음과 같습니다.
- Po: 문장 부호(Punctuation, other)
- Nd: 십진 숫자(Number, decimal digit)
- Ll: 소문자(Letter, lowercase)
마치며
이번 글에서는 파이썬의 유니코드 문자 데이터베이스 모듈인 unicodedata의 개념과 함께, 문자를 찾는 lookup(), 문자의 이름을 조회하는 name(), 그리고 문자 범주를 판별하는 category() 함수의 사용법을 살펴보았습니다. 다국어 텍스트 처리나 정규화 작업을 수행할 때 이 모듈을 적극 활용해 보시기 바랍니다.