Il existe diverses difficultés dans la gestion d'Unicode. J'ai beaucoup étudié ces derniers temps. Il peut donc y avoir de terribles erreurs de la part des débutants Unicode dans ce qui suit:
Je connaissais les points confus des différences de normalisation Unicode (NFC, NFD, NFKC, NFKD), Dans un autre calque, lors du comptage visuel des caractères thaïlandais, des caractères arabes, des caractères devanagari, etc., il semble nécessaire de compter dans un calque supérieur appelé Graphème.
Référence: 7 façons de compter le nombre de caractères
Grapheme
En d'autres termes
--Si vous comptez normalement le nombre de caractères dans un langage de programmation, ce sera le nombre de points de code.
Il semble.
Alors, de quels outils Python dispose-t-il pour compter les clusters Grapheme? Il ne semblait pas être inclus dans unicodedata, la bibliothèque Python standard.
Il semble y avoir un package appelé uniseg.
Cet article montre principalement un exemple en Python 3. (Je ne parlerai pas de la différence dans la façon dont unicode, str, octets sont gérés entre Python 2 et Python 3. Si vous le touchez, cela va considérablement différer.)
$ pip install uniseg
>>> import uniseg.graphemecluster
>>> graphme_split = lambda w: tuple(uniseg.graphemecluster.grapheme_clusters(w))
>>>
>>> phrase = 'กินข้าวเย็น' #Cela semble être une phrase qui signifie manger un dîner en thaï
>>> len(phrase.encode('UTF-8')) # UTF-Octets à 8
33
>>> len(phrase) # Code Points
11
>>> len(graphme_split(phrase)) # Graphme clusters
8
Etc.
uniseg semble avoir une division basée sur des mots ou des phrases. Il semble qu'il puisse être coupé avec de l'espace, il semble donc qu'il n'est pas possible d'écrire en japonais, qui est un mot collant.
Recommended Posts