www.wikidata.de-de.nina.az
Der Unicode Collation Algorithm kurz UCA ist der vom Unicode Konsortium veroffentlichte Algorithmus um Zeichenketten aus Unicode Zeichen zu vergleichen und so alphabetisch zu ordnen Er ist dabei bewusst so offen gehalten dass sprachspezifische Besonderheiten und besondere Anwenderwunsche berucksichtigt werden konnen Zum Algorithmus steht ausserdem eine Tabelle mit Standardwerten fur die Sortierung zur Verfugung die Default Unicode Collation Element Table DUCET Daneben stellt das Common Locale Data Repository entsprechende Tabellen fur viele weitere Sprachen zur Verfugung die etwa in der Implementierung des ICU Projekts genutzt werden Inhaltsverzeichnis 1 Anforderungen 2 Geschichte 3 Algorithmus 3 1 Ebene 1 Grundbuchstaben 3 2 Ebene 2 Akzente 3 3 Ebene 3 Gross und Kleinschreibung 3 4 Weitere Ebenen 4 Sortiergewichte 4 1 Beispiele 4 1 1 Einfache Buchstaben 4 1 2 Buchstaben mit Akzenten Ligaturen und Buchstabenkombinationen 4 1 3 Steuerzeichen Symbole und Ziffern 4 1 4 Satz und Leerzeichen 4 2 Anpassung 4 3 Varianten 5 Beispiel 6 Suchalgorithmus 7 Weblinks 8 EinzelnachweiseAnforderungen BearbeitenDie grosse Anzahl an Zeichen die in Unicode kodiert sind macht es schwierig Zeichenketten zu sortieren So ist etwa nicht klar ob Worter aus griechischen Buchstaben vor solchen aus kyrillischen Buchstaben stehen sollten oder umgekehrt Auch entspricht die Reihenfolge in der die einzelnen Zeichen kodiert sind nicht immer der gewunschten Reihenfolge bei der Sortierung In verschiedenen Sprachen bestehen unterschiedliche Auffassungen uber die Reihenfolge einzelner Buchstaben Beispielsweise werden in deutschen Lexika Worter mit a so sortiert als stunde dort ein gewohnliches a wahrend in skandinavischen Sprachen das a ein eigener Buchstabe ist der nach dem z kommt Selbst innerhalb einer Sprache konnen solche Unterschiede vorkommen etwa im Deutschen wo das a teilweise wie ein a teilweise wie ein ae behandelt wird Es kommt auch vor dass nicht einfach nach einzelnen Zeichen sortiert werden kann So wird der Digraph ch im traditionellen Spanisch als eigener Buchstabe behandelt der zwischen c und d kommt Ferner konnen je nach Anwendung bestimmte zusatzliche Anforderungen gestellt werden beispielsweise konnte St wie Sankt einsortiert werden Geschichte BearbeitenAutoren des Algorithmus sind Mark Davis und Ken Whistler Die erste Version wurde am 30 Marz 1997 veroffentlicht 1 Zum Stand September 2012 liegt der Algorithmus in der Version 26 vor Mit ISO 14651 existiert ein ahnlicher Algorithmus der ISO der allerdings weniger Moglichkeiten bietet 2 Mit neueren Versionen kamen immer mehr Konfigurationsmoglichkeiten hinzu etwa die Moglichkeit Zahlen numerisch zu sortieren Algorithmus BearbeitenUm zwei Zeichenketten zu vergleichen geht der Algorithmus in verschiedenen Schritten vor und vergleicht die beiden Zeichenketten auf verschiedenen Ebenen Die Anzahl und Bedeutung der Ebenen kann dabei prinzipiell frei gewahlt werden Standard sind jedoch drei Ebenen mit folgenden Bedeutungen Ebene 1 Grundbuchstaben Bearbeiten Auf der ersten Ebene werden die Zeichenketten gemass ihrer Grundbuchstaben verglichen Akzente Gross und Kleinschreibung Satzzeichen und Ahnliches werden dabei ublicherweise ignoriert So werden auf dieser Ebene die Worter Mull und Mull als gleich betrachtet das Wort Muli kommt aber davor Ebene 2 Akzente Bearbeiten Stimmen die Worter in den Grundbuchstaben uberein werden als Nachstes die Akzente verglichen In fast allen Sprachen wird dabei von links nach rechts nach dem ersten Unterschied gesucht und dann nach einer festen Reihenfolge sortiert Buchstaben ohne Akzent zuerst die anderen Akzente in einer festen Reihenfolge So ergibt sich etwa die Reihenfolge cote cote cote cote Eine Ausnahme bildet das kanadische Franzosisch Hier wird traditionell nach dem letzten Unterschied sortiert cote cote cote cote Ebene 3 Gross und Kleinschreibung Bearbeiten Stimmen die Worter auch in den Akzenten uberein so wird nach der Gross und Kleinschreibung sortiert wobei meist die Kleinbuchstaben vor die Grossbuchstaben sortiert werden Weitere Ebenen Bearbeiten Bei Bedarf konnen sich weitere Ebenen anschliessen um eine noch feinere Unterscheidung zu ermoglichen Haufig wird als Abschluss nach den einzelnen Codepunkten sortiert Dies stellt sicher dass zwei unterschiedliche Zeichenketten immer in derselben Reihenfolge sortiert werden Sortiergewichte BearbeitenUm Zeichenketten zu vergleichen liefert der Algorithmus zu einer Zeichenkette aus Unicode Zeichen einen binaren Sortierschlussel Dieser Schlussel wird dann im eigentlichen Sortieralgorithmus beim Vergleich verwendet Zur Bestimmung des Sortierschlussels wird eine Tabelle verwendet die fur einzelne Zeichen oder Zeichenkombinationen fur alle Ebenen binare Gewichte auflistet eine sogenannte Collation Element Table Einem Eintrag konnen dabei auch mehrere Gewichte pro Ebene zugewiesen werden Ein Gewicht von 0000 bedeutet dabei dass das entsprechende Zeichen auf dieser Ebene ignoriert werden soll Fur Zeichen die nicht in der Tabelle aufgefuhrt werden muss ein Gewicht berechnet werden Fur die Standardtabelle ist dies nur bei CJKV Schriftzeichen der Fall fur die Berechnung der Gewichte ist auch ein Algorithmus angegeben Zunachst wird die Zeichenkette in moglichst lange Stucke zerlegt die einen Eintrag in der Tabelle haben und die zugehorigen Gewichte aus der Tabelle ausgelesen Diese Gewichte werden zunachst fur jede Ebene einzeln aneinander gehangt wobei 0000 weggelassen wird Fur eine kanadisch franzosische Sortierung wird die Reihenfolge in Ebene 2 umgekehrt Die Schlussel fur die einzelnen Ebenen werden zuletzt durch 0000 getrennt zu einem einzigen Sortierschlussel aneinander gehangt Beispiele Bearbeiten Die meisten dieser Beispiele fur Eintrage einer Collation Element Table sind der DUCET in der Version 6 1 0 entnommen 3 Angegeben sind hier jeweils die Gewichte der ersten drei Ebenen als Hexadezimalzahlen Die Gewichte werden durch Punkte getrennt und in eckige Klammern eingeschlossen Einfache Buchstaben Bearbeiten Zeichen Gewichte Anmerkunga 15D4 0020 0002 15D4 ist das Gewicht fur den Grundbuchstaben a A 15D4 0020 0008 Das grosse A unterscheidet sich erst auf der dritten Ebene vom kleinen a b 15EA 0020 0002 15EA ist das Gewicht fur den Grundbuchstaben b dieser kommt nach a mit etwas Platz fur benutzerspezifische Erganzungen c 1602 0020 0002 z 187A 0020 0002 a 190E 0020 0002 Nach den Buchstaben des lateinischen Alphabets folgen die der anderen Alphabete etwa des griechischen Buchstaben mit Akzenten Ligaturen und Buchstabenkombinationen Bearbeiten Buchstaben mit diakritischen Zeichen werden in ein Grundzeichen und folgende kombinierende Zeichen zerlegt Zeichen Gewichte Anmerkunga 15D4 0020 0002 0000 0035 0002 Nach dem Gewicht fur a folgt das Gewicht fur den Gravis der auf Ebene 1 unberucksichtigt 0000 bleibt a 15D4 0020 0002 0000 0043 0002 Im Normalfall wird das a als Variante des a aufgefasst a 187B 0020 0002 Im Schwedischen wird ein abweichendes Gewicht verwendet hier folgt das a als eigener Buchstabe nach dem z a 15D4 0020 0002 0000 0047 0002 ae 15D4 0020 0004 0000 0139 0004 1631 0020 001F ae wird auf der ersten Ebene wie ae behandelt ch 1603 0020 0002 Im traditionellen Spanisch wird ch wie ein Buchstabe behandelt der nach c kommt Steuerzeichen Symbole und Ziffern Bearbeiten Zeichen Gewichte AnmerkungLRM 0000 0000 0000 Steuerzeichen wie z B das Links nach rechts Zeichen werden vollstandig ignoriert 15A4 0020 0002 15BC 0020 0002 1 15CB 0020 0002 2 15CC 0020 0002 15CC 0020 0014 Hochgestellte Ziffern unterscheiden sich analog zu Grossbuchstaben erst auf der dritten Ebene von der Grundziffer 9 15D3 0020 0002 Satz und Leerzeichen Bearbeiten Bei Satz und Leerzeichen gibt es verschiedene Moglichkeiten die Gewichte zu wahlen In vielen Implementierungen etwa in PHP 4 werden diese Zeichen so gewichtet wie in der Tabelle angegeben Zeichen Gewichte Anmerkunggewohnliches Leerzeichen 020A 0020 0002 geschutztes Leerzeichen 020A 0020 001B Das geschutzte Leerzeichen wird erst auf Ebene 3 vom gewohnlichen unterschieden Bindestrich Minus 020E 0020 0002 Halbgeviertstrich 0216 0020 0002 Komma 0221 0020 0002 Doppelpunkt 0237 0020 0002 Ausrufezeichen 025E 0020 0002 Punkt 0273 0020 0002 Apostroph 02EA 0020 0002 Apostroph 02EC 0020 0002 Anfuhrungszeichen 02F1 0020 0002 Anfuhrungszeichen 02F2 0020 0002 Anfuhrungszeichen 02F4 0020 0002 offnende Klammer 02FB 0020 0002 schliessende Klammer 02FC 0020 0002 Schragstrich 0372 0020 0002 Ursprunglich war geplant diese Zeichen als Standardverhalten uberhaupt nicht zu berucksichtigen ihnen also wie Steuerzeichen das Gewicht 0000 0000 0000 zu geben 5 In der derzeitigen Fassung des Algorithmus wird als Standardverhalten etwas Ahnliches gefordert Auch hier wird als Gewicht 0000 0000 0000 gewahlt aber dafur noch eine vierte Ebene angefugt in der als Gewicht der eigentlich fur die Ebene 1 angegebene Wert verwendet wird wahrend andere Zeichen den in dieser Ebene hochstmoglichen Wert FFFF erhalten Daneben existieren noch weitere Varianten zwischen denen der Benutzer wahlen kann Anpassung Bearbeiten Die Standardtabelle kann auf viele Arten angepasst werden Es konnen sprachspezifische Anderungen an den einzelnen Gewichten vorgenommen werden und zusatzliche Zeichenkombinationen mit Gewichten aufgenommen werden Fur viele Sprachen stehen entsprechend angepasste Tabellen bereits zur Verfugung Fur benutzerdefinierte Anpassungen existiert eine eigene Syntax diese anzugeben die von geeigneten Programmen in eine Tabelle mit entsprechenden Sortiergewichten ubersetzt werden kann Bei Bedarf kann angegeben werden dass auf der zweiten Ebene vom Ende der Zeichenkette aus sortiert werden soll wie es im kanadischen Franzosisch ublich ist Prinzipiell ist dies auch fur andere Ebenen moglich wenn auch nicht sinnvoll Es kann gewahlt werden auf wie vielen Ebenen der Vergleich stattfinden soll Diese Zahl wird als Starke bezeichnet Der Standard ist 3 aber sofern die Tabelle Gewichte fur mehr Ebenen angibt kann auch eine grossere Zahl gewahlt werden Es kann aber auch eine kleinere Zahl gewahlt werden wenn ein kurzer Sortierschlussel Prioritat gegenuber einer detaillierten Sortierung hat Fur bestimmte Zeichen meist Leer und Satzzeichen kann zwischen verschiedenen Varianten fur die Gewichte gewahlt werden Der Standard beschreibt noch viele weitere Optionen Varianten Bearbeiten Es gibt verschiedene Methoden den Algorithmus abzuandern etwa um kurzere binare Schlussel zu erhalten So ist es moglich auf die trennenden 0000 zu verzichten sofern die Gewichte von Ebene zu Ebene abnehmen Daneben gibt es noch weitere Varianten die zu starkeren Einsparungen fuhren Beispiel BearbeitenEs sollen die Begriffe Nina Nino NINO Nino und Ninu in alphabetische Reihenfolge gebracht werden Sie werden in einzelne Buchstaben zerlegt deren Gewichte bestimmt und daraus die Sortierschlussel zusammengesetzt Im Schlussel ist der Teil der zur ersten Ebene gehort blau unterlegt die zweite Ebene grun die dritte gelb Nina kommt als erstes das Wort unterscheidet sich bereits auf der ersten Ebene vom folgenden Wort Nino Unterstreichung Dieses wiederum stimmt auf den beiden ersten Ebenen mit NINO uberein erst in der dritten Ebene ergibt sich ein Unterschied Beim nachsten Wort Nino ist der Schlussel wegen der Tilde in der zweiten und dritten Ebene langer als bei den anderen Worten diese Tilde liefert auch den ersten Unterschied zum vorhergehenden Wort Als letztes kommt Ninu das sich wiederum bereits auf der ersten Ebene von den vorangehenden Wortern unterscheidet Wurde man diese Worter nach Codepunkten sortieren ergabe sich stattdessen die Reihenfolge NINO Nina Nino Ninu Nino Wort zerlegt SortierschlusselNina N i n a span style background color b3b7ff 1734 16B2 1734 u 15D4 u span 0000 span style background color b9ffc5 0020 0020 0020 0020 span 0000 span style background color ffebad 0008 0002 0002 0002 span 1734 0020 0008 16B2 0020 0002 1734 0020 0002 15D4 0020 0002 Nino N i n o span style background color b3b7ff 1734 16B2 1734 u 1756 u span 0000 span style background color b9ffc5 0020 0020 0020 0020 span 0000 span style background color ffebad 0008 u 0002 u 0002 0002 span 1734 0020 0008 16B2 0020 0002 1734 0020 0002 1756 0020 0002 NINO N I N O span style background color b3b7ff 1734 16B2 1734 1756 span 0000 span style background color b9ffc5 0020 0020 0020 u 0020 u span 0000 span style background color ffebad 0008 u 0008 u 0008 0008 span 1734 0020 0008 16B2 0020 0008 1734 0020 0008 1756 0020 0008 Nino N i n o span style background color b3b7ff 1734 16B2 1734 u 1756 u span 0000 span style background color b9ffc5 0020 0020 0020 u 004E u 0020 span 0000 span style background color ffebad 0008 0002 0002 0002 0002 span 1734 0020 0008 16B2 0020 0002 1734 0020 0002 0000 004E 0002 1756 0020 0002 Ninu N i n u span style background color b3b7ff 1734 16B2 1734 u 181B u span 0000 span style background color b9ffc5 0020 0020 0020 0020 span 0000 span style background color ffebad 0008 0002 0002 0002 span 1734 0020 0008 16B2 0020 0002 1734 0020 0002 181B 0020 0002 Suchalgorithmus BearbeitenTeile des Algorithmus konnen auch bei Textsuchen Anwendung finden etwa wenn mit einer Suche nach ss auch Worter mit ss gefunden werden sollen Eine Ubereinstimmung soll in diesem Fall dann erkannt werden wenn das Suchwort und der mogliche Treffer auf der ersten Ebene ubereinstimmen Weblinks BearbeitenOffizielle Formulierung des Algorithmus englisch Demonstration des Algorithmus ICU User Guide Collation Introduction englisch Einzelnachweise Bearbeiten Erste Revision des UCA Unicode FAQ Collation What are the differences between the UCA and ISO 14651 allkeys txt Version 6 1 0 PHP manual The Collator class UCA Version 1 Abschnitt Variable Collation Elements Abgerufen von https de wikipedia org w index php title Unicode Collation Algorithm amp oldid 164276841