Beat: Unicode Sortierung

Beitrag lesen

Eben das habe ich befürchtet, dass ich da selbst Basteln muss.

Unicode::Normalize scheint doch das gewünschte zu machen.

Habe ich heute bereits verwendet. Bringt bereits gute Resultate.
Allerdings scheint meine unicodeData.txt nicht auf dem aktuellsten Stand zu sein.
Ich verwende einen Testfont Junicode. Ich stelle fest dass für viele hier umgesetzte Codepunkte noch kein Eintrag in Perls UnicodeData.txt besteht.
Na dann halt zum Update via ppm.

Was ich noch vergaß zu erwähnen: NFKD reicht natürlich nicht aus, weil z.B. „ß“ davon nicht betroffen ist. Ich würde also in der Vergleichsfunktion noch auf Uppercase normalisieren. Wenn ich denn selber eine teure Vergleichsfunktion basteln wollen würde.

Case ist noch ein Offener Punkt.
Die meisten locales sortieren AaBb.
Komischerweise sortiert mein Algorithmus mit locale aAbB.
Ich möchte meiner Sortierfunktion aber eine Property mitgeben, welche Basiessortierungen definiert:
NAaBb NABab ABabN AaBbN

Ich habe mir heute mal einen Unicode Viewer gebastelt, der mir die Informationen via Unicode::UCD ausgibt.

Dekomposition hilft für die meisten Fälle die ich will. Ebenso wie die vernächlässigung nach NFKD von Zeichen die weder \p{L} noch \p{N} sind

Beispiel:
NFKC($string))
'NFKD'
...
Note
"\N{LATIN
(Oct
...
maybe
$may_be_composed_with_prev_char
modification;

Der gleiche Autor des obigen Moduls hat nämlich noch Unicode::Collate geschrieben, dass den Unicode Collation Algorithm zumindest größtenteils implementiert. Das kann man sich zunutze machen, vor allem, weil man eine eigene Collation-Tabelle angeben kann.

Damit könnte ich Æ, ß, æ, IJ, ij etc... sortieren. Die Anzahl scheint mir überschaubar, vor allem wenn NFKD vorher durchgeführt wird.

Bis jetzt haben ich auf jeden Fall mal Einblicke in Unicode gewonnen, und die Ideen für den Sortieralgorithmus nehmen gestalt an.

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische