Schick programmiert

Transliteration und Romanisierung von Texten

In einem meiner aktuellen Projekte geht es um Dokumentenarchivierung – international. International bedeutet hier nicht nur, dass man diesen Dienst in jedem Land nutzen kann und alle Texte entsprechend übersetzt sind, sondern auch, dass man Texte in verschiedenen Sprachen eingeben und suchen kann.

Einige dieser Texte enthalten Sonderzeichen, die Sprachspezifisch sind. Im Deutschen kennen wir alle die Umlaute ä, ö, ü und ß. Das ist aber erst der kleine Anfang. Im Norwegischen gibt es die Sonderzeichen å, æ und ø.

Nun kann es vorkommen, dass eine deutsche Person ein Dokument archivieren soll, wo in der Beschreibung einer dieser norwegischen Buchstaben drin steht – oder sie sucht nach einem solchen Dokument.

Was ist nun eine gute Möglichkeit, diese Sonderzeichen zu „normalisieren“? Oder auf jeden Fall so zu schreiben, dass jeder sie schreiben kann – egal welches Keyboard-Layout er eingestellt hat?

Und was mache ich, wenn ich eine Suchmaschine, wie Elasticsearch, nutze, die in der genutzten Version nur Suchanfragen mit Wildcards unterstützt, wenn man keine Sonderzeichen in der Suchanfrage hat?

Ein ganz anderer Anwendungsfall für das gleiche Schema ist das generieren einer URL. Auch dort ist es ratsam meist lateinische Buchstaben zu nutzen.

Die Lösung ist einfach: Romanisierung.

Hinter diesem Wort stehen gleich mehrere Möglichkeiten. Die eigentliche Bedeutung kommt daher, dass die Römer viele andere Völker und Länder besetzt haben und ihnen ihren Glauben und ihre Sprache und Schreibweise aufgezwungen haben. Linguistisch ist damit gemeint, dass jeder Umlaut in eine passende Buchstabenfolge umgewandelt wird, sodass der gesamte Text mit den Buchstaben von A bis Z dargestellt werden kann.

Eine dieser Formen ist sprachspezifisch. Wir im Deutschen umschreiben unsere Umlaute mit ä => ae, ö => oe, ü => ue und ß => ss. Diese Umschreibung ist allerdings lokalisationsbedingt. Ich habe auch Referenzen von Zeichen gefunden, die in anderen Sprachen auf eine andere Weise romanisiert werden.

Es gibt aber auch eine standardisierte Form. Diese ist auch nicht schwer zu merken. Alle diakretischen Zeichen (¨ bei ö, ◌̸ bei ø, ´ bei é) werden entfernt, Linguaturen (œ, æ) werden getrennt geschrieben (œ => oe, æ => ae), Spezialzeichen wie ß als ss usw. Für jede Gruppe von Zeichen gibt es eine allgemein gültige Umschreibungsregel.

Um es noch interessanter zu machen: Romanisierung, wie hier beschrieben, gilt nur für das lateinische Alphabet. Jetzt gibt es aber auch unterschiedliche Schriftsysteme … Alphabete wie Kyrillisch, Armenisch, Griechisch oder Konsonantenschriften wie Arabisch und Hebräisch, die relativ einfach zu übersetzen sind, aber auch logographische Sprachen wie Hangeul oder Kanji, die zum Beispiel in Japan, Korea und China genutzt werden.

Alle diese Schriftsysteme kann man auch auf unterschiedliche Weise in das lateinische Alphabet übersetzen.

Entweder man macht es lautgetreu (Transkription genannt) – wobei es hier auf die Quellsprache und die Zielsprache ankommt. Ein Beispiel ist der Buchstabe И aus dem kyrillischen Alphabet. Er wird im Russischen wie ein deutsches i ausgesprochen, im Ukrainischen aber wie ein y. Das gleiche ist im Lateinischen, wo der Laut sch im deutschen sh im englischen geschrieben würde. Diese Möglichkeit eignet sich also nicht für etwas automatisches wie URL-Generierung, wenn man keine Lokalisationsdaten hat.

Transliteration ist ein anderer Ansatz, der die genaue Übersetzung von Zeichen zu Zeichen vorschreiben. Hierbei wird nicht viel Wert auf die genaue Aussprache des Wortes, aber des Buchstaben gelegt.
Ein Beispiel hierfür (kyrillisch zu lateinisch): жина -> žena

Für mich war die Kombination aus Transliteration und Romanisierung passend. Damit bekam ich alle Buchstaben in eine lautähnliche Variante des lateinischen Alphabetes in romanisierter Form. Das Beispiel жена wird somit zu zena.

Hier noch der dazu passende PHP Code:

echo transliterator_transliterate('Any-Latin; Latin-ASCII', "жена");
// zena

Wenn jemand eine Transskription braucht, sollte er sich die Funktion iconv() ansehen, welche auf Basis der gesetzten Lokalisation arbeitet. Das verlinkte Kommentar zur Funktion iconv auf der php.net Seite hat mehr Informationen zu diesem Thema.

Quellen:

 


Categorised as: Uncategorized


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.