wiki:normalization/6

Version 28 (modified by Wolfgang Schmidle, 13 years ago) (diff)

--

6. Wie soll normalisiert werden?

Ziele

Das Hauptziel der Normalisierung ist eine moderne Schreibweise des Textes, zum Beispiel die heutige u/v-Schreibweise in Latein.

Außerdem:

  • Die Normalisierungsregeln sollten eindeutig formulierbar sein.
  • Die Normalisierungsschicht sollte so einfach wie möglich sein, aber nicht einfacher:
    • muss mit einfachen Algorithmen wie bei u/v umgehen können (Latein)
    • muss mit offenen Klassen umgehen können (Chinesisch)
  • Die Normalisierungen für die Anzeige und für Pollux/Donatus sollten so ähnlich wie möglich sein, aber nicht ähnlicher.
  • Es muss für jede Normalisierung eine Begründung geben; kein Zeichen wird auf Verdacht normalisiert.
  • Wenn etwas sprachspezifisch und nicht buchspezifisch ist, sollte es zur Normalisierung und nicht zur Regularisierung gehören.
  • Bei Wörtern, die irrtümlicherweise nicht regularisiert wurden, sollte die Normalisierung den Fehler nicht verschleiern.
  • Korrekt geschriebene Texte in modernen Sprachen sollten im Idealfall gar keine Normalisierungen benötigen.

Regularisierung und Normalisierung

Details der Regularisierung werden hier diskutiert.

Ausgangspunkt für die Normalisierung ist ein Text, der bereits regularisiert ist. Im Idealfall bedeutet das:

  • Fehler im Text korrigiert
  • keine Abkürzungszeichen mehr im Text
  • keine PUA-Zeichen mehr im Text
  • der Text ist in NFC-Normalform

Natürlich muss die Normalisierung mit der Textversion arbeiten, die sie vorfindet. Formal gesagt: Für Wörter mit <reg> und einem norm-Attribut in diesem <reg> arbeitet die Normalisierung nicht mit dem originalen Wort, sondern mit der Version im norm-Attribut. Bei Wörtern ohne <reg>, oder mit einem <reg> ohne norm-Attribut, wird das originale Wort verwendet.

Beispiele für das Zusammenspiel von Regularisierung und Normalierung siehe hier. Es ist nicht immer einfach zu entscheiden, ob etwas regularisiert oder normalisiert werden soll. Beispielsweise ist "q;" ein Abkürzungszeichen und wird regularisiert, während "ę" kein Abkürzungszeichen ist und daher nicht regularisiert, sondern normalisiert wird.

Textanzeige und Wörterbücher

Die Normalisierung für eine Sprache teilt sich auf in die Normalisierung für die Textanzeige und für das Wörterbuch. Die Normalisierung für das Wörterbuch ist unabhängig vom gerade aktiven Textanzeigemodus: Jede Anfrage an das Wörterbuch wird auf Basis des regularisierten Wortes normalisiert.

Die Normalisierung für das Wörterbuch teilt sich noch einmal auf:

  • sprachimmanent (Beispiel "Gravis wird zu Akut")
  • technisch bedingt (Beispiel "Unicode wird zu Betacode")

Sprachimmanente Normalisierungen treffen auf alle Wörterbücher zu. Ich gehe der Einfachheit halber davon aus, dass die in der Tabelle beschriebenen Normalisierungen (Groß- zu Kleinbuchstaben, Entfernen unnötiger Diakritika, chinesische Standardzeichen, Gravis wird Akut) alle sprachimmanent sind, mit der Ausnahme "Kaese" für Celex. Zum Beispiel bei der Umwandlung in Kleinbuchstaben, um ein Wort in Großbuchstaben trotzdem im Wörterbuch zu finden, bin ich mir jedoch nicht sicher, ob sie wirklich sprachimmanent ist. Wenn ein Wörterbuch keine Schwierigkeiten mit Großbuchstaben hat, zum Beispiel weil es Großbuchstaben intern selbst in Kleinbuchstaben umwandelt, müssen wir es nicht normalisieren.

Zu technisch bedingten Normalisierungen kann ich nicht viel sagen. Ich weiß nicht genau, wie die Schnittstelle zu den jeweiligen Wörterbüchern funktioniert und welche Kodierungen dabei verwendet werden.

Die sprachimmanente und die technisch bedingte Normalisierung werden hintereinander geschaltet: zuerst sprachimmanent, dann technisch bedingt. In einer Sprache kann es mehr als ein technisch bedingtes Normalisierungsmodul geben, wenn verschiedene Wörterbücher verschiedene Normalisierungen erwarten. Ein Beispiel ist Celex versus Grimmsches Wörterbuch: Celex erwartet "Kaese", Grimm kann mit "Käse" umgehen. Ein Wörterbuch kann auch gar keine zusätzliche Normalisierung benötigen.

Im Meeting 2010-12-10 haben wir über das Problem des "Zurückschickens" gesprochen, also dem Versuch, aus der technisch bedingt normalisierten Form zurück zur Originalform zu kommen. Beispielsweise wird bei Celex der Umlaut ö zu oe normalisiert, und deshalb kann Celex das Wort Poebene und das fiktive Wort Pöbene nicht auseinanderhalten. Wenn man also aus den Einträgen im Celex eine explizite Liste ermitteln möchte, auf welche nicht-normalisierten Wörter es reagieren würde, muss man aus der normalisierten Form alle möglichen nicht-normalisierten Wortformen erstellen. Das ist schwierig (siehe zum Beispiel hier). Es scheint mir aber auch gar keinen Grund zu geben, warum man von der technisch bedingt normalisierten Form zurück zur Originalform kommen möchte. Das kommt mir verkehrt herum gedacht vor. Wenn Celex beispielsweise ö zu oe normalisiert und deshalb das Wort Poebene und das fiktive Wort Pöbene nicht auseinanderhalten kann, kann der Text dieses Problem einfach ignorieren. Im Text wird das Wort korrekt angezeigt, und sowohl Poebene als auch Pöbene werden zu Poebene normalisiert und dann mit dem Eintrag für Poebene verbunden.

Diakritika

Für Diakritika bedeutet Normalisierung, dass sie entfernt werden.

  1. Diakritika, die in einer Sprache verwendet werden, werden nicht normalisiert: Beispiel ist ä ö ü im Deutschen.
  2. Diakritika zur Disambiguierung oder als Lesehilfe wie in aër und verò im Lateinischen, die in der modernen Schreibweise nicht mehr verwendet werden, werden normalisiert. Wenn sie nicht reine Lesehilfen sind, können aber noch zur Lemma-Disambiguierung oder zumindest zur Wortform-Disambiguierung beitragen.
  3. Diakritika bei Abkürzungszeichen werden nicht normalisiert. Beispielsweise wird eiuſdẽ, falls es aus Versehen nicht regularisiert wurde, zu eiusdẽ, aber nicht zu eiusde normalisiert. Durch Weglassen der Tilde kann offensichtlich nicht die richtige Wortform herauskommen. Stattdessen gibt es drei mögliche Fälle:
    • Es kommt gar keine echte Wortform heraus. Dann ist man nicht weiter als mit der originalen Form. Beispiele: eiuſdẽ wird zu eiusde und ſcīa wird zu scia.
    • Es kommt das falsche Lemma heraus, d.h. der Fehler wird kaschiert. Beispiel: itẽ wird zu ite. (Es gibt allerdings wohl nur wenige reale Beispiele.)
    • Es kommt die falsche Wortform im richtigen Lemma heraus: zum Beispiel reſiduũ wird zu residuu. Spätestens bei der morphologischen Analyse erweist sich das als Problem.
  4. Diakritika, die in der entsprechenden Sprache gar nicht vorkommen sollten, werden nicht normalisiert. Zeichen mit Kombinationen von mehreren Diakritika werden ebenfalls nicht normalisiert. Es ist nicht die Aufgabe der Normalisierung, die Textqualität stillschweigend zu verbessern.

Auch Konsonanten können Diakritika haben. Es ist grundsätzlich möglich, dass in einer Sprache dasselbe Diakritikum bei verschiedenen Buchstaben, also beispielsweise ä und ö, zu verschiedenen Gruppen gehört.

Unicode-Fehler durch identisch aussehende Zeichen werden bei uns im Gegensatz zu Arboreal nicht normalisiert. Zum Beispiel ά (03AC) wird nicht zu ά (1F71) normalisiert. Es ist Aufgabe eines Workflow-Skriptes, solche Zeichen zu finden bzw. zu ersetzen.

Sprachschichten

Dieser Abschnitt ist noch nicht fertig ausgearbeitet. Es ist noch nicht klar, wie wir mit verschiedenen Sprachschichten umgehen sollen. Sehr wahrscheinlich muss es aber unterschiedliche Normalisierungen für unterschiedliche Sprachschichten geben. Beispielsweise ist es nicht sinnvoll, alle deutschen Texte auf die moderne Rechtschreibung zu normalisieren.

Sprachschicht meint eine Art Verfeinerung von Sprachstufen. Der Begriff Sprachstufe, also zum Beispiel Mittelhochdeutsch, Frühneuhochdeutsch und Neuhochdeutsch, ist wohl zu grob für unsere Zwecke. Ein Text von 1890 und von 1910 unterscheidet sich durch die unterschiedliche Schreibung von Thier versus Tier, aber es sind keine verschiedenen Sprachstufen.

Reicht es im Deutschen, nur für die Wörterbücher zu normalisieren? Dann würde zum Beispiel "worinn" angezeigt werden, aber der Wörterbucheintrag für "worin" gezeigt werden. Oder erwartet der Benutzer, dass das Wort in der normalisierten Textanzeige so aussieht wie das nachgeschlagene Wort? Problem ist, dass dem Benutzer bei deutschsprachigen Texten bei einem Unterschied zwischen beiden Formen nicht klar sein muss, ob unser System sich etwas dabei gedacht hat oder ob es schlicht geraten hat und eventuell den falschen Wörterbucheintrag anzeigt.

Ein Beispiel im Lateinischen: Im Benedetti gibt es zum Beispiel sowohl cęlum/cælum (wird zur korrekten Schreibweise caelum normalisiert) als auch cœlum (mittellateinische Schreibweise; die normalisierte Schreibweise coelum wird in einem modernen Wörterbuch vermutlich nicht gefunden).

  • Möglicherweise brauchen wir eine Sprachschicht "Mittellatein".
  • Als Alternative zum Standard-Latein oder als vor- oder nachgeschaltetes Modul? Beachte dabei, dass Benedetti Wortformen aus beiden Sprachschichten hat.
  • Eine Wortliste, oder Ersetzungsregeln?
  • Wird die Schreibweise in der Textanzeige normalisiert, oder nur für das Wörterbuch? (Wäre das eine Aufgabe der Normalisierung? Gegen Regularisierung spricht: es ist kein Textfehler und auch nicht buchspezifisch.)
  • Oder als buchspezifisches Normalisierung, eventuell als overlay? Wäre auch bei Alvarus eine buchspezifische Normalisierung sinnvoll, um sich einen großen Teil der Regularisierungen im Text zu sparen? Eine buchspezifische Normalisierung ist quasi eine hochspezialisierte Sprachstufe. Oder wird unser System damit zu zersplittert? Unsere Texte könnten dann praktisch nur noch bei uns korrekt angezeigt werden. Wir könnten aber einen Service anbieten, dass sich Benutzer das XML mit dem entsprechend normalisierten Text herunterladen können.
  • Alvarus hat ein anderes Set von bedeutungstragenden Diakritika als Benedetti (zum Beispiel enthält Benedetti kein ſcīa). Es könnte also durchaus passieren, dass zum Beispiel ë im Alvarus bedeutungstragend ist. Ob die beiden Sets tatsächlich inkompatibel oder lediglich nicht identisch sind, weiß ich nicht. Es ist im Alvarus auch oft nicht klar, ob ein Diakritikum optisch bzw. semantisch eher ein Makron, eine Tilde oder "Umlaut-Punkte" ist. Das Beispiel ë ist jedenfalls frei ausgedacht, und im regularisierten Text sollten bedeutungstragende Diakritika gar nicht mehr vorkommen.

Jedem Text ist eine Sprachschicht zugeordnet, entweder durch eine explizite Angabe in den Metadaten oder durch eine implizite Folgerung aus der Sprache des Textes und seinem Erscheinungsjahr.

  • Jochen: Der Benutzer soll aber auch die Möglichkeit haben, den Text mit den Normalisierungen für andere Sprachschichten auszuprobieren.
  • Sollte man einen französischen Text auch probehalber mit den italienischen Normalisierungsregeln anzeigen lassen können, oder nur mit unterschiedlichen Sprachschichten der gleichen Sprache?
  • Ich gehe davon aus, dass die Wahl der Sprachschicht sich sowohl auf die Textanzeige als auch auf die Wörterbuch-Normalisierung bezieht.

Standard-Normalisierungen in allen Sprachen

  • ſ wird zu s
  • Es gibt (zumindest für die Textanzeige) keine Normalisierungsregeln für Satzzeichen.
  • Bindestriche werden in der Textanzeige nicht normalisiert. Für das Wörterbuch und für die Suche im normalisierten Text wird ein Bindestrich am Ende der Zeile entfernt und das Wort zusammengesetzt.
  • Als normalisierenswerte Diakritika kommen in der Regel nur ó ò ô ö õ ō ŏ in Frage, alle anderen Diakritika werden nicht normalisiert. Andere Diakritika wie ḫ in der Transliterierung eines Keilschrifttextes oder ǘ in Pinyin gelten von vornherein als Absicht. Und auch bei den Diakritika ó ò ô ö õ ō ŏ müssen bei jeder Sprache die Diakritika, die normalisiert werden sollen, jeweils explizit angegeben werden.
  • Umgang mit hyphen und soft hyphen, <lb/> etc.
  • Umgang mit combining characters versus precomposed characters
  • Falls nicht anders angegeben, gelten für Kleinbuchstaben aufgestellten Regeln in der Textanzeige entsprechend auch für eventuelle Großbuchstaben. (In der Normalisierung für das Wörterbuch entfällt die Version für Großbuchstaben, weil vermutlich nur Kleinbuchstaben weitergeleitet werden.) Beispiele:
    • Aus "ò wird zu o" folgt die Regel "Ò wird zu O".
    • Aus "æ wird zu ae" folgt die Regel "Æ wird zu AE" (und nicht Ae)
    • Die Regel "ſ wird zu s" hat kein Gegenstück, weil es kein großes ſ gibt.

Fragen:

  • Ist es sinnvoll, ein sprachunabhängiges Modul zu haben, das zum Beispiel die Regel "ſ wird zu s" enthält? Die sprachspezifische Normalisierung besteht dann aus dem sprachunabhängigen Modul und einem sprachabhängigen Modul. Ohne ein sprachunabhängiges Modul muss die Regel "ſ wird zu s" in jedem sprachabhängigen Modul wiederholt werden. Andererseits gibt es nur wenige sprachunabhängige Regeln.
  • In fast allen Sprachen wird ß zu ss. Ist es deshalb sinnvoll, im sprachunabhängigen Modul die Regel "ß wird zu ss" zu haben, was nur vom Modul für Deutsch durch die Regel "ß wird nicht normalisiert" ersetzt wird? Wahrscheinlich würde das Ändern der Regeln dadurch schwieriger, und man könnte das sprachunabhängige Modul dann nicht mehr einfach vor dem sprachabhängigen Modul ausführen.
  • Sind die Normalisierungen für die Anzeige und das Wörterbuch in einer Sprache unabhängig voneinander, oder besteht die Normalisierung für das Wörterbuch aus der Normalisierung für die Textanzeige und weiteren Normalisierungen? Bei den überflüssigen Diakritika wäre das nicht möglich, ansonsten ginge es wohl.

Latein

Ziel der Normalisierung im Lateinischen ist die akzeptierte moderne Schreibweise.

  • Im Gegensatz zum Deutschen wird ß wie in eße oder serenißimi normalisiert.
  • æ wird zu ae
  • ę wird ebenfalls zu ae
  • œ wird zu oe
  • ij wird zu ii
  • Diakritika:
    • es gibt keine Diakritika, die im Lateinischen verpflichtender Teil des Schriftbilds sind
    • überflüssige Diakritika sind ò ô ö wie in aër, verò, hîc (und entsprechend für alle Vokale)
    • Abkürzungs-Diakritika sind õ ō wie in reſiduũ, ſcīa (und entsprechend für alle Vokale)
    • Was ist mit ó ŏ ?
    • Andere Diakritika werden nicht normalisiert. Insbesondere die Zeichen 1E14-1E1D und 1EB8-1EC7 und die Äquivalente für die anderen Vokale werden nicht normalisiert.
  • Medievalist characters wie ꝙ (A759) sollten regularisiert sein. Wenn sie doch noch enthalten sind, werden sie nicht normalisiert.
  • u/v: Malcolms Algorithmus für das Italienische kann (mit korrigiertem und angepasstem Umgang mit getrennten Wörtern) für das Lateinische übernommen werden. Sinnvoll ist allerdings wohl eine Neu-Implementierung in Lex.

Überflüssige Diakritika können zur Lemma- und Wortform-Disambiguierung verwendet werden. Details müssen noch geklärt werden:

  • ò ist wohl eine reine Lesehilfe
  • ô ist wohl ein Längezeichen
  • ö ist wohl eine reine Lesehilfe

Beachte: Eine Jahreszahl wie MDLXXXV (Benedetti p.5: <emph class="sc">mdlxxxv</emph>) darf nicht normalisiert werden. Mit den neuen Regeln für u/v würde das nicht mehr passieren. Da V immer rechts von X, L, C, D, M ist und rechts neben V nur I sein kann, gibt es wohl keine römische Zahl, die normalisiert werden würde. (Eigentlich sollte die Zahl auch wie der Inhalt von <var> vor der morphologischen Analyse versteckt werden. Deshalb besser: <num value="1585" style="sc">mdlxxxv</num>, und <num> wird wie <var> ausgenommen.)

Beachte das Kodierungsproblem bei der Kommunikation mit Donatus: Wahrscheinlich wird ISO 8859-1 verwendet.

Arboreal:

  • ç wird vorläufig nicht normalisiert

Italienisch

Über Italienisch weiß ich wenig. Aber zumindest die u/v-Regeln gelten auch hier.

Englisch

Gibt es überhaupt sprachspezifische Normalisierungen?

Problem der älteren Sprachstufen.

Französisch

Über Französisch weiß ich wenig.

  • Es gibt wohl keine überflüssigen Diakritika.
  • Übliche Diakritika, die nicht normalisiert werden, sind ó ò ô.
  • œ wird im Gegensatz zum Lateinischen nicht normalisiert.
  • Wie ist es mit ß und u/v?

Deutsch

Umlaute und ß werden nicht normalisiert, im Gegensatz zum Lateinischen.

Bindestriche werden für die Anzeige nicht normalisiert. Für das Wörterbuch: Bindestriche innerhalb eines Wortes werden nicht normalisiert. Probleme wie "Vor- und Rücksicht" (mit space nach dem Bindestrich) können wir wohl nicht lösen. Am Ende der Zeile wird das Wort ohne Bindestrich zusammengesetzt, außer der zweite Teil beginnt mit einem Großbuchstaben. Alles, was dann immer nicht korrekt erkannt wird, können wir nicht ändern. (Eventuell ist das Wörterbuch clever genug, das Bindestrich-Problem selber zu lösen.)

Darüber hinaus ist eine orthographische Normalisierung deutscher Texte schwierig. Eventuell wird es mehrere verschiedene Normalierungsregeln in Abhängigkeit vom Alter des Textes geben. Mögliche Sprachschichten sind:

  • 21. Jh. (nach Rechtschreibreform 2000)
  • 20. Jh. (nach Rechtschreibreform 1901)
  • 19. Jh. (weitgehend einheitliche Schreibungen schon vor Rechtschreibreform)
  • etc.

Der Sinn der Regel "é wird zu e" in Arboreal ist mir unklar, deshalb wird sie vorläufig nicht übernommen.

Fraktur

Mir ist noch nicht klar, ob {uo} mit einem MUFI-PUA-Zeichen oder als zuͦ geschrieben werden sollte. Diese Entscheidung findet aber vor der Normalisierung statt. Im ersten Fall findet die Normalisierung "zu" vor, im zweiten Fall "zuͦ".

Für die Normalisierung gibt es also die Regel: uͦ wird zu u.

Chinesisch

Ziel der Normalisierung im Chinesischen ist Textversion mit Standardzeichen.

Die Normalisierung im Chinesischen funktioniert über eine Zeichenliste, in der jeweils ein oder mehr Zeichenvarianten auf ein Standardzeichen zurückgeführt werden. Beispielsweise wird das Zeichen 歴 (6B74) zu 歷 (6B77) normalisiert. (Beachte: der Unicode-Codepoint des Standardzeichens kann höher sein als der Codepoint der Zeichenvariante.)

Im Chinesischen gibt es eine Schwelle, unter der eine Zeichenvariante nicht mehr sinnvoll vom Standardzeichen unterschieden werden kann. (Die Variante 歴 von 歷 gehört nicht dazu, auch wenn die beiden Zeichen für das ungeübte Auge gleich aussehen. Tatsächlich hat 歴 zwei Striche weniger als 歷.) Diese Entscheidung ist aber im Text bereits getroffen worden. Die Normalisierung ist nur noch rein technischer Akt: Ersetze das Unicode-Zeichen 歴 durch das-Unicode-Zeichen 歷, etc.

Es liegt in der Natur der Sache, dass die Zeichenliste eine offene Klasse ist. Die Liste wird regelmäßig ergänzt werden. Wir brauchen eine Architektur, die damit umgehen kann. Im Idealfall sollte dies möglich sein, ohne dass Programmcode angepasst werden muss. Insbesondere sollten der Mechanismus und die Liste selbst in getrennten Dateien stehen.

Die Normalisierung für das Wörterbuch ist wie immer unabhängig vom Textanzeigemodus: Auch im Original-Modus soll das Standardzeichen an das Wörterbuch geschickt werden.

Die ZWS werden zumindest in der Normalisierung für das Wörterbuch entfernt.

Einen Service zur Umwandlung von Lang- in Kurzzeichen könnten wir zwar auch anbieten, aber wirklich sinnvoll wäre das für klassisches Chinesisch wohl nicht.

Arabisch

Über Arabisch weiß ich zu wenig.

Keilschrift

Über Keilschrifttexte weiß ich zu wenig.

Griechisch

Ziel der Normalisierung im Griechischen ist die akzeptierte moderne Schreibweise des Altgriechischen.

  • Im griechischen Text sollten alle Ligaturen regularisiert sein, d.h. in das faithful-Attribut verschoben. Noch im Text vorhandene Ligaturen werden nicht normalisiert.
  • Im Text können middle dots enthalten sein, die ebenfalls nicht normalisiert werden.
  • Beachte bei der Kommunikation mit Pollux das Problem mit dem Sigma (Ticket #64):
    • Anzeige im Text sollte richtig sein
    • link sollte richtig sein
    • Wörterbuch-Eintrag sollte richtig sein

Sind für Ticket 64 Änderungen an Donatus / Pollux nötig? Oder brauchen wir ein kleines Konvertierungsmodul?