Понимание unistr unicodedata.normalize () - PullRequest
0 голосов
/ 30 января 2020

В Википедии в основном говорится следующее для четырех значений unistr.

- NFC (Normalization Form Canonical Composition)
    - Characters are decomposed
    - then recomposed by canonical equivalence.
- NFKC (Normalization Form Compatibility Composition)
    - Characters are decomposed by compatibility
    - recomposed by canonical equivalence
- NFD (Normalization Form Canonical Decomposition)
    - Characters are decomposed by canonical equivalence
    - multiple combining characters are arranged in a specific order.
- NFKD (Normalization Form Compatibility Decomposition)
    - Characters are decomposed by compatibility
    - multiple combining characters are arranged in a specific order.

Так что для каждого из вариантов это двухшаговое преобразование? Но normalize () показывает только конечный результат. Есть ли способ увидеть промежуточные результаты?

Вики также говорят:

Например, отдельные строки Unicode "U + 212B" (знак ангстрема "Å") и " U + 00C5 "(буква Swedi sh" Å ") расширяется с помощью NFD (или NFKD) в последовательность" U + 0041 U + 030A "(латинская буква" A "и объединяющее кольцо над" ° "), которая затем уменьшается на NF C (или NFK C) до «U + 00C5» (Swedi sh буква «Å»).

Но я не могу воспроизвести его с normalize(). Кто-нибудь может привести больше примеров, чтобы показать, как работают эти четыре варианта? В чем их отличия?

>>> from unicodedata import normalize
>>> print(normalize('NFC', 'A°'))
A°
>>> print(normalize('NFKC', 'A°'))
A°
>>> print(normalize('NFD', 'Å'))
Å
>>> print(normalize('NFKD', 'Å'))
Å
>>> len(normalize('NFC', 'A°'))
2
>>> len(normalize('NFKC', 'A°'))
2
>>> len(normalize('NFD', 'Å'))
2
>>> len(normalize('NFKD', 'Å'))
2
...