2010-06-27 4 views
3

파이썬에서 유니 코드 텍스트를 표준화하려고합니다. 나는 파이썬에서 결합 유니 코드 문자의 "비정규 화 된"형식을 얻는 쉬운 방법이 있는지 궁금합니다. 예 : uo \ xaf '(즉, latin small letter o 다음에 combining macron) 시퀀스가있는 경우 ō (latin small letter o with macron)가 표시됩니다. 그것은 다른 길을 갈 쉽게 :파이썬 "유니 코드 조합 문자"를 denormalize

내가 댓글을 달았으로
o = unicodedata.lookup("LATIN SMALL LETTER O WITH MACRON") 
o = unicodedata.normalize('NFD', o) 
+0

U + 00AF *이 장음을 결합 * 아니다. U + 0304입니다. – kennytm

+0

'\ xaf'는 결합 매크로가 아니며 '\ u0304'가 있습니다. –

+0

oops. 내가 질문을 썼을 때 숫자가 섞여있어 :) – Puzzled79

답변

4

, U + 00AF가 결합 장음이 아니다. 하지만 NFKD 변환으로 U + 0020 U + 0304로 변환 할 수 있습니다.

>>> unicodedata.normalize('NFKD', u'o\u00af') 
u'o \u0304' 

그런 다음 공간을 제거하고 NFC로 ō를 얻을 수 있습니다.


(NFKD 어떤 의미가 손실 될 수있는 방법으로 분해에 매우 적극적인 있습니다 -. "호환"밖으로 분리 될 것이다 아무것도 예를 들어

  • '½' (U + 008D) ↦ '1''⁄' (U + 2,044) '2';
  • '²' (U + 00B2) ↦ '2'
  • '①' (+ 2,460 U) ↦ '1'

등)

+0

매력처럼 작동합니다! 고마워요. 저는 NFKD를 시도했지만, 다시 정상화하는 것을 생각하지 않았습니다. – Puzzled79

+0

질문이 입력으로 지정하려는 문자열이'u'o \ u0304''라는 사실을 감안할 때 NFKD 정규화가 처음에는 필요하지 않습니다. 해당 문자열에 대한 NFC 정규화 만 수행하면 'u'\ u014d ''의 원하는 결과를 얻을 수 있습니다. – markshep

+0

@markshep : OP의 질문을주의 깊게 읽어보십시오. 입력 순서는 'u'o \ xaf''o''e'' **'** u'o \ u0304''입니다. ''\ xaf ''를''\ u0304 ''로 변환하려면 NFKD해야합니다. – kennytm

3
o = unicodedata.normalize('NFC', o) 
관련 문제