유니 코드 정규화
파이썬에서 유니 코드 문자열을 정규화하여이를 표현하는 데 사용할 수있는 가장 단순한 유니 코드 엔티티 만 이해하도록 표준 방법이 있습니까?
나는, 같은 순서를 번역 무언가 의미 ['LATIN SMALL LETTER A', 'COMBINING ACUTE ACCENT']
로를 ['LATIN SMALL LETTER A WITH ACUTE']
?
문제가 어디에 있는지 확인하십시오.
>>> import unicodedata
>>> char = "á"
>>> len(char)
1
>>> [ unicodedata.name(c) for c in char ]
['LATIN SMALL LETTER A WITH ACUTE']
그러나 지금:
>>> char = "á"
>>> len(char)
2
>>> [ unicodedata.name(c) for c in char ]
['LATIN SMALL LETTER A', 'COMBINING ACUTE ACCENT']
물론 모든 문자를 반복하고 수동으로 교체하는 등의 작업을 수행 할 수는 있지만 효율적이지 않으며 특수한 경우의 절반을 놓치고 실수를 저지를 것이라고 확신합니다.
이 unicodedata
모듈은 NFC 형식으로 정규화하려는 .normalize()
기능을 제공합니다 .
>>> unicodedata.normalize('NFC', u'\u0061\u0301')
u'\xe1'
>>> unicodedata.normalize('NFD', u'\u00e1')
u'a\u0301'
NFC 또는 'Normal Form Composed'는 구성된 문자, NFD를 반환하고 'Normal Form Decomposed'는 분해되고 결합 된 문자를 제공합니다.
추가 NFKC 및 NFKD 양식은 호환성 코드 포인트를 처리합니다. 예를 들어 U + 2160 (로만 숫자 1)은 실제로 U + 0049 (라틴 대문자 I)와 동일하지만 별도로 처리하는 인코딩과 호환되도록 유니 코드 표준에 존재합니다. 문자를 구성하거나 분해하는 것 외에도 NFKC 또는 NFKD 형식을 사용하면 모든 '호환성'문자가 표준 형식으로 바뀝니다.
>>> unicodedata.normalize('NFC', u'\u2167') # roman numeral VIII
u'\u2167'
>>> unicodedata.normalize('NFKC', u'\u2167') # roman numeral VIII
u'VIII'
구성 및 분해 된 형식이 의사 소통을한다는 보장은 없습니다. 결합 된 문자를 NFC 형식으로 정규화 한 다음 결과를 다시 NFD 형식으로 변환해도 항상 동일한 문자 시퀀스가 생성되는 것은 아닙니다. 유니 코드 표준 은 예외 목록을 유지합니다 . 이 목록의 문자는 구성 가능하지만 여러 가지 이유로 결합 된 형태로 다시 분해 할 수 없습니다. 또한 Composition Exclusion Table 에 대한 설명서를 참조하십시오 .
예, 있습니다 .
unicodedata.normalize(form, unistr)
참조 URL : https://stackoverflow.com/questions/16467479/normalizing-unicode
'your programing' 카테고리의 다른 글
미디어 유형이 'text / plain'인 콘텐츠에서 'String'유형의 개체를 읽는 데 사용할 수있는 MediaTypeFormatter가 없습니다. (0) | 2020.12.30 |
---|---|
R Markdown HTML 출력의 출력 너비 조정 (0) | 2020.12.30 |
EditText.getText ()가 null을 반환합니까? (0) | 2020.12.30 |
레코드 수를 계산하고 data.table의 각 그룹 내에서 행 번호를 생성합니다. (0) | 2020.12.30 |
Android Studio : 검색 결과에서 빌드 폴더의 파일 제외 (0) | 2020.12.30 |