본문 바로가기
개발 이야기/Python

베트남어 성조 제거하여 알파벳으로 변환하기

by _ppuing 2021. 6. 30.
반응형

회사에서 다국어를 지원하다보니 베트남어 인풋을 받아 처리를 해야 하는 문제가 생겼다. 고객이 베트남인일 때 알파벳을 입력하는 것은 어려워하지만 베트남어 키보드로 이름을 치는 건 쉽게 할 수 있는데, 문제는 우리가 베트남어를 받아서 영문 알파벳으로 변환을 하여 협력사에 알파벳 이름을 전달해야 한다. 

 

예를 들어, 한 고객의 이름이 Nguyễn Vũ Quốc Anh 이라고 했을 때, 이 이름을 Nguyen Vu Quoc Anh 으로 변환해야 한다. 문제 해결을 위해 베트남어에 사용되는 전체 문자열을 나열하고, 그에 대응하는 알파벳으로 치환해주는 간단한 함수를 구현한다.

 

def remove_accents(input):
    if not input:
        return ""
    
    s1 = u'ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíòóôõùúýĂăĐđĨĩŨũƠơƯưẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ'
    s0 = u'AAAAEEEIIOOOOUUYaaaaeeeiioooouuyAaDdIiUuOoUuAaAaAaAaAaAaAaAaAaAaAaAaEeEeEeEeEeEeEeEeIiIiOoOoOoOoOoOoOoOoOoOoOoOoUuUuUuUuUuUuUuYyYyYyYy'
    
    s = "".join([s0[s1.index(c)] if c in s1 else c for c in input]) # s1 -> s0 로 변환하여 리턴할 결과 문자열
    return s

input 을 한 글자씩 순차조회 하며, 일반 알파벳이 아닌 경우에는 s1의 동일 위치에 있는 s0의 알파벳을 가져오는 코드이다. 결과는 어레이 이므로 join 함수를 통해 다시 string으로 만들어 주면 완료.

반응형

댓글