Comptez bien le nombre de caractères thaïlandais et arabes en Python

Unicode difficile

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 en Python?

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.

répondre

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.)

Comment installer

$ pip install uniseg

Exemple d'utilisation

>>> 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.

Autre

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

Comptez bien le nombre de caractères thaïlandais et arabes en Python
Divise la chaîne de caractères par le nombre de caractères spécifié. En Ruby et Python.
Comptez le nombre de caractères dans le texte dans le presse-papiers sur Mac
[Homologie] Comptez le nombre de trous dans les données avec Python
Projet Euler # 17 "Nombre de caractères" en Python
Compter le nombre de caractères avec écho
Sortie du nombre de cœurs de processeur en Python
Remplissez la chaîne avec des zéros en python et comptez certains caractères de la chaîne
traitement (python) Diagramme les coordonnées de la liste Spécifiez le nombre de fois dans draw ()
Comment obtenir le nombre de chiffres en Python
Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Obtenir la taille (nombre d'éléments) de Union Find en Python
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
Vérifiez le temps de traitement et le nombre d'appels pour chaque processus avec python (cProfile)
Obtenez le nombre d'éléments spécifiques dans la liste python
Python --Trouvez le nombre de groupes dans l'expression regex
[Astuces] Problèmes et solutions dans le développement de python + kivy
Nombre maximum de caractères dans l'appel shell Python3 (par OS)
L'histoire de Python et l'histoire de NaN
"Livre pour former la capacité de programmation à se battre dans le monde" Exemple de réponse de code Python --1.2 Compter le nombre des mêmes caractères
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
[Python] Réduisons le nombre d'éléments dans le résultat dans le fonctionnement de l'ensemble
Obtenez le titre et la date de livraison de Yahoo! News en Python
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Vérifiez le comportement du destroyer en Python
Compter / vérifier le nombre d'appels de méthode.
Le résultat de l'installation de python sur Anaconda
Principes de base pour exécuter NoxPlayer en Python
À la recherche du FizzBuzz le plus rapide en Python
Projet Euler # 1 "Multiple de 3 et 5" en Python
Graphique de l'historique du nombre de couches de deep learning et du changement de précision
Comparer la grammaire de base de Python et Go d'une manière facile à comprendre
python> array> Déterminer le nombre et initialiser> mylist = [idx pour idx dans la plage (10)] / mylist = [0 pour idx dans la plage (10)] >> mylist = [0] * 10
Changer la saturation et la clarté des spécifications de couleur comme # ff000 dans python 2.5
Vérifions la chaîne d'octets en mémoire du nombre flottant flottant en Python
[Python] Calculez le nombre de chiffres requis lors de la saisie de 0 [Note]
Ouvrez un fichier Excel en Python et coloriez la carte du Japon
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
Comptez le nombre de fois que deux valeurs apparaissent simultanément dans un élément de type itérateur Python 3
4 méthodes pour compter le nombre d'occurrences d'entiers dans un certain intervalle (y compris la méthode imos) [implémentation Python]
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Vérifiez si les caractères sont similaires en Python
Résumé des différences entre PHP et Python
Récupérer l'appelant d'une fonction en Python
Faites correspondre la distribution de chaque groupe en Python
La réponse de "1/2" est différente entre python2 et 3
Afficher le résultat du traitement de la géométrie en Python
Énumération des nombres premiers et jugement des nombres premiers en Python
Calculez le nombre total de combinaisons avec python
Spécification de la plage des tableaux ruby et python
Divisez la chaîne de caractères en le nombre de caractères spécifié
Copiez la liste en Python
À propos de la différence entre "==" et "is" en python
Trouvez le nombre de jours dans un mois
Découvrez la fraction de la valeur saisie en python
Comparez la vitesse d'ajout et de carte Python
Trouvez la solution de l'équation d'ordre n avec python
L'histoire de la lecture des données HSPICE en Python
[Note] À propos du rôle du trait de soulignement "_" en Python