Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/01/2020, à 20:42

Arbiel

Classement par ordre alphabétique de caractères UTF-8

Bonsoir

Et puisqu'il n'est pas encore trop tard, bonne année à tous.

Je veux classer par ordre alphabétique un fichier qui contient des caractères grecs polytoniques. Apparemment sort ne répond pas à mon besoin, comme le montrent les exemples ci-dessous

remi@remi-Vostro-3550:~$ for car in a  d u s ᾳ ϋ ά ῶ ϐ  υ η ω ; do echo ${car}; done | sort
ᾳ
ά
ῶ
a
d
s
u
ϐ
η
υ
ϋ
ω
remi@remi-Vostro-3550:~$ 

puis

remi@remi-Vostro-3550:~$ for car in a  d u s ᾳ ϋ ά ῶ ϐ  υ η ω ; do echo -n " ${car} "; unicode --brief -s ${car};  done | sort
 a a U+0061 LATIN SMALL LETTER A
 d d U+0064 LATIN SMALL LETTER D
 s s U+0073 LATIN SMALL LETTER S
 ά ά U+1F71 GREEK SMALL LETTER ALPHA WITH OXIA
 ᾳ ᾳ U+1FB3 GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
 ῶ ῶ U+1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI
 u u U+0075 LATIN SMALL LETTER U
 ϐ ϐ U+03D0 GREEK BETA SYMBOL
 η η U+03B7 GREEK SMALL LETTER ETA
 υ υ U+03C5 GREEK SMALL LETTER UPSILON
 ϋ ϋ U+03CB GREEK SMALL LETTER UPSILON WITH DIALYTIKA
 ω ω U+03C9 GREEK SMALL LETTER OMEGA
remi@remi-Vostro-3550:~$ 
remi@remi-Vostro-3550:~$ for car in a  d u s ᾳ ϋ ά ῶ ϐ  υ η ω ; do echo "${car} ${car}"; done | sort -d -k1
ᾳ ᾳ
ά ά
ῶ ῶ
ϐ ϐ
η η
υ υ
ϋ ϋ
ω ω
a a
d d
s s
u u
remi@remi-Vostro-3550

Les trois exemples aboutissent à des classements différents les uns des autres, ce qui est incompréhensible à mes yeux, et aucun des résultats n'est conforme à l'ordre alphabétique attendu.

Merci à quiconque pourra m'indiquer pourquoi j'obtiens de tels résultats et comment je dois faire pour obtenir ce que je veux.

Arbiel


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.

Hors ligne

#2 Le 12/01/2020, à 21:01

pingouinux

Re : Classement par ordre alphabétique de caractères UTF-8

Bonsoir,
Que veux-tu comme résultat ?
Voici une autre façon de faire :

$ for car in a  d u s ᾳ ϋ ά ῶ ϐ  υ η ω ; do echo ${car}; done | LC_COLLATE=C sort
a
d
s
u
η
υ
ω
ϋ
ϐ
ά
ᾳ
ῶ

Hors ligne

#3 Le 12/01/2020, à 22:35

Arbiel

Re : Classement par ordre alphabétique de caractères UTF-8

Bonsoir pingouinux

Merci pour ta réponse. L'utilisation de LC_COLLATE répond au problème que je me posais.

Je viens de consulter le document "Unicode Collation Algorithm" et j'y ai pris conscience de la grande diversité des classements alphabétiques.

Pour aller plus loin dans mon besoin, et être capable de trier correctement des mots du grec polytonique, sais-tu quelle valeur je dois donner à LC_COLLATE pour retrouver par exemple tous les caractères basés sur «α» avant «β» ? Ou bien, sais-tu où je peux trouver les valeurs possibles de cette variable ?

Je pensais, jusqu'à ta réponse, transformer les caractères accentués (cad avec diacritiques) en leur base (ά, ὰ, ᾶ, ᾳ.… en α), l'ordre des caractères accentués n'ayant que peu d'importance. Rares en effet sont les mots du grec ancien qui ne diffèrent que par l'accentuation d'une lettre. Il y en a, mais dans mon dictionnaire, l'ordre dans lequel ils sont présentés me semble plus correspondre à leur fréquence dans la langue qu'à un ordre alphabétique bien défini.


Encore merci de ton aide.

Arbiel

P.S. Je viens de trouver le répertoire /usr/share/i18n/locales dont le nom des fichiers contenus semblent être les valeurs possibles de LC_COLLATE, (LC* ?)

Dernière modification par Arbiel (Le 12/01/2020, à 22:49)


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.

Hors ligne

#4 Le 12/01/2020, à 22:48

pingouinux

Re : Classement par ordre alphabétique de caractères UTF-8

Arbiel #3 a écrit :

sais-tu quelle valeur je dois donner à LC_COLLATE pour retrouver par exemple tous les caractères basés sur «α» avant «β» ?

Je ne sais pas. L'ordre obtenu en #2 semble correspondre au classement par valeur unicode.

Ou bien, sais-tu où je peux trouver les valeurs possibles de cette variable ?

locale -a

Hors ligne

#5 Le 12/01/2020, à 22:55

Arbiel

Re : Classement par ordre alphabétique de caractères UTF-8

remi@remi-Vostro-3550:~$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
fr_BE.utf8
fr_CA.utf8
fr_CH.utf8
fr_FR.utf8
fr_LU.utf8
POSIX
remi@remi-Vostro-3550:~$ 

mais aucune valeur avec gr ou el.

Par ailleurs, LC_COLLATE=el_GR ne trie pas comme je l'espère, peut-être sans effet compte tenu de son absence dans le retour de «locale -a».


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.

Hors ligne

#6 Le 12/01/2020, à 23:04

Arbiel

Re : Classement par ordre alphabétique de caractères UTF-8

Ne t'embête pas avec tout cela. Je vais me rabattre sur le «déshabillage» des lettres avec diacritiques, cela fera l'affaire.

Je te remercie pour ta disponibilité

Arbiel


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.

Hors ligne