유니코드 텍스트 정렬하기

매일 공부(ML)·2022년 11월 24일
0

Fluent Python

목록 보기
24/130

텍스트와 바이트

유니코드 텍스트 정렬하기

파이썬은 각 시퀀스 안에 들어 있는 항목들을 하나하나 비교하여 어떤 자료형의 시퀀스도 설명할 수 있고, 문자열의 경우에는 각 단어의 코드 포인트를 비교한다. 바이스키 문자를 사용하는 경우 부적절한 결과가 발생할 수 있다.

fruits = ['caju','atemoia','caja','acerola']
sorted(fruits)

정렬 규칙은 현지 언어에 따라 달라지고, 포르투칼어 등 라틴 알파벳을 사용하는 언어에서는 정렬할 때 악센트와 갈고리형 기호가 거의 영향을 미치지 않습니다.


바이스키 텍스트는 locale.strxfrm() 함수를 이용해서 변환하는 것으로 locale 모듈 문서에 따르면 strfrm()함수는 문자열을 현지어와 비교하여 사용할 수 있는 문자열로 변환

locale.strxfrm() 함수를 활성화하기 위해선 적절한 현지어를 설정해야 한다.

#정렬할 때는 locale.strxfrm() 함수를 키로 사용하기 전에 setlocale(LC_COLLATE, <지역_언어>)를 호출한다.
import locale
locale.setlocale(locale.LC_COLLATE, 'pt_BR.UTF-8')
fruits = ['caju','atemoia','caja','acerola']
sorted_fruits =  sorted(fruits, key=locale.strxfrm)
sorted_fruits

유니코드 대조 알고리즘을 이용한 정렬

장고에 다양한 기여를 하고 있는 제임스토버도 유니코드 대조 알고리즘을 순수 파이썬으로 구현한 PyUCA를 만들었다.

import pyuca
coll = pyuca.Collator()
fruits = ['caju','atemoia','caja','acerola']
sorted_fruits =  sorted(fruits, key=locale.strxfrm)

PyUCA는 지역 정보를 고려하지 않으므로, 정렬 방식을 커스터마이즈하려면 Collator() 생성자에 직접 만든 대조 테이블에 경로를 제공하면 되고, 기본적으로 프로젝트와 함께 제공된다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글

관련 채용 정보