Python "денормализует" юникод, объединяющий символы - PullRequest
3 голосов
/ 27 июня 2010

Я хочу стандартизировать некоторый текст в кодировке Юникод в python. Мне интересно, есть ли простой способ получить «денормализованную» форму комбинированного символа юникода в python? например если у меня есть последовательность u'o \ xaf '(то есть latin small letter o, за которой следует combining macron), чтобы получить ō (latin small letter o with macron). Легко пойти другим путем:

o = unicodedata.lookup("LATIN SMALL LETTER O WITH MACRON")
o = unicodedata.normalize('NFD', o)

Ответы [ 2 ]

4 голосов
/ 27 июня 2010

Как я уже прокомментировал, U + 00AF не является комбинирующим макроном.Но вы можете преобразовать его в U + 0020 U + 0304 с помощью преобразования NFKD.

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

Затем вы можете удалить пробел и получить ō с помощью NFC.NFKD довольно агрессивен в декомпозиции, так что некоторая семантика может быть потеряна - все, что «совместимо», будет выделено, например:

  • '½' (U + 008D)1012 * (U + 2044) '2';
  • '²' (U + 00B2) ↦ '2'
  • '①' (U + 2460) ↦ '1'

и т. Д.)

4 голосов
/ 27 июня 2010
o = unicodedata.normalize('NFC', o)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...