Changes between Version 5 and Version 6 of normalization


Ignore:
Timestamp:
Dec 6, 2010, 9:47:39 AM (13 years ago)
Author:
Wolfgang Schmidle
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • normalization

    v5 v6  
    11= Normalisierung =
    22
    3 [[PageOutline(1-4,,pullout)]]
     3Für die Anzeige unserer XML-Volltexte haben wir mehrere Anzeige-Modi, nämlich
     4 * Original
     5 * Regularized
     6 * Normalized
    47
    5 == Zusammenfassung ==
     8Grob gesprochen meint Original die größtmögliche Annäherung der Vorlage mit Unicode-Mitteln. Regularized meint die Ansicht mit buchspezifischen Korrekturen. Normalized meint die Ansicht mit einer sprachspezifische Normalisierung des Textes.
     9 
     10In diesem Text geht es darum, wie die Normalisierung funktioniert:
    611
    7 Abschnitt 1 beschreibt die Normalisierungsregeln in Arboreal und im Backend im Detail. In Abschnitt 2 werden diese Regeln diskutiert. Abschnitt 3 beschreibt, in welchen Situationen diese Regeln angewendet werden. In Abschnitt 4 beschreibe ich, wie bei uns normalisiert werden soll. Abschnitt 5 listet auf, was dafür konkret zu tun ist.
     12 1. [wiki:normalization/1 Wie werden Wörter zurzeit normalisiert?]
     13 1. [wiki:normalization/2 Was bedeutet das?]
     14 1. [wiki:normalization/3 Wann wird zurzeit normalisiert?]
     15 1. [wiki:normalization/4 Wie soll normalisiert werden?]
     16 1. [wiki:normalization/5 Was ist zu tun?]
    817
    9 == 1. Wie werden Wörter zurzeit normalisiert? ==
     18Abschnitt [wiki:normalization/1 1] beschreibt die bisherigen Normalisierungsregeln in Arboreal und im Backend im Detail. In Abschnitt [wiki:normalization/2 2] werden diese Regeln diskutiert. Abschnitt [wiki:normalization/3 3] beschreibt, in welchen Situationen diese Regeln angewendet werden. In Abschnitt [wiki:normalization/4 4] beschreibe ich, wie bei uns normalisiert werden soll. Abschnitt [wiki:normalization/5 5] listet auf, was dafür konkret zu tun ist.
    1019
    11 Im folgenden gehe ich alle Sprachen einzeln durch. Zuerst werden jeweils die Normalisierungen in der Arboreal-Klasse [attachment:OrthographicRules.java OrthographicRules] aufgelistet, danach werden die Änderungen in der Backend-Klasse [attachment:MpdlNormalizer.java MpdlNormalizer] aufgelistet. Abschnitt 1 kann auch übersprungen werden.
     20Insbesondere Abschnitt [wiki:normalization/1 1] ist recht technisch. Am einfachsten ist es wohl, mit Abschnitt [wiki:normalization/4 4] anzufangen.
    1221
    13 In den Tabellen wird immer zuerst die normalisierte Form genannt, und dann alle Formen, die in dieselbe Form normalisiert werden. Beispiel:
    14 || ae || æ (00E6) ę (0119)  ||
    15 bedeutet, dass æ und ę zu ae normalisiert werden. "--" bedeutet, dass die Form ganz getilgt wird. Bei combining characters habe ich jeweils ein o dazugemacht, damit man den combining character besser erkennen kann.
    16 
    17 === Latein ===
    18 
    19 || i || j ||
    20 || u || v ||
    21 || que || q; ||
    22 
    23 ";" wird getilgt, wenn das Zeichen direkt davor kein Buchstabe ("Character.isLetter") ist.
    24 
    25 Malcolm: Linguistic note: /u/ and /v/ are rarely phonemic in Latin, as in
    26   * alui 's/he nourished' vs. alvi 'of a belly',
    27   * volui 's/he wished' or 'it rolled' vs. volvi 'to be rolled',
    28   * (in)seruit 's/he joined together' vs. (in)servit 's/he serves'.
    29 
    30 || -- || combining ò (0300) combining ó (0301) combining ô (0302) soft hyphen (00AD)  ||
    31 || A || À (00C0) Á (00C1) Â (00C2) Ä (00C4) Ā (0100) Ă (0102)  ||
    32 || Ae || Æ (00C6) Ę (0118)  ||
    33 || C || Ç (00C7)  ||
    34 || E || È (00C8) É (00C9) Ê (00CA) Ë (00CB) Ē (0112) Ĕ (0114)  ||
    35 || I || Ì (00CC) Í (00CD) Î (00CE) Ï (00CF) Ī (012A) Ĭ (012C)  ||
    36 || O || Ò (00D2) Ó (00D3) Ô (00D4) Ö (00D6) Ō (014C) Ŏ (014E)  ||
    37 || Oe || Œ (0152)  ||
    38 || U || Ù (00D9) Ú (00DA) Û (00DB) Ü (00DC) Ū (016A) Ŭ (016C)  ||
    39 || a || à (00E0) á (00E1) â (00E2) ä (00E4) ā (0101) ă (0103)  ||
    40 || ae || æ (00E6) ę (0119)  ||
    41 || c || ç (00E7)  ||
    42 || e || è (00E8) é (00E9) ê (00EA) ë (00EB) ē (0113) ĕ (0115)  ||
    43 || i || ì (00EC) í (00ED) î (00EE) ï (00EF) ī (012B) ĭ (012D)  ||
    44 || o || ò (00F2) ó (00F3) ô (00F4) ö (00F6) ō (014D) ŏ (014F)  ||
    45 || oe || œ (0153)  ||
    46 || s || ſ (017F)  ||
    47 || ss || ß (00DF)  ||
    48 || u || ù (00F9) ú (00FA) û (00FB) ü (00FC) ū (016B) ŭ (016D)  ||
    49 || -- || 〈 (2329) 〉 (232A)  ||
    50 
    51 
    52 Beachte: Zirkumflex (z.B. û 00FB, ê 00EA) wird normalisiert, aber nicht Tilde (z.B. ũ 0169, ẽ 1EBD)
    53 
    54 Backend zusätzlich:
    55 
    56 || e || Ḕ (1E14) ḕ (1E15) Ḗ (1E16) ḗ (1E17) Ḙ (1E18) ḙ (1E19) Ḛ (1E1A) ḛ (1E1B) [[BR]] Ḝ (1E1C) ḝ (1E1D) Ẹ (1EB8) ẹ (1EB9) Ẻ (1EBA) ẻ (1EBB) Ẽ (1EBC) ẽ (1EBD) [[BR]] Ế (1EBE) ế (1EBF) Ề (1EC0) ề (1EC1) Ể (1EC2) ể (1EC3) Ễ (1EC4) ễ (1EC5) [[BR]] Ệ (1EC6) ệ (1EC7)  ||
    57 
    58 Insbesondere wird jetzt auch ẽ (1EBD) normalisiert.
    59 
    60 === Italienisch ===
    61 
    62 Regeln:
    63  * u wird zu v, wenn direkt davor und danach ein Vokal (d.h. A E I O U Æ Œ in groß/klein) steht (hyphen/soft hyphen davor wird übersprungen)
    64  * j: ij wird zu ii
    65  * v wird zu u, wenn direkt davor und danach ein Konsonant (d.h. B C D F G H K L M N P Q R S T V W X Z in groß/klein sowie ſ ß) steht (hyphen/soft hyphen danach wird übersprungen), außerdem am Anfang eines Wortes oder wenn direkt davor kein Buchstabe ist
    66  * t: tio wird zu zio (i und o können auch groß sein)
    67  * h am Wortanfang wird getilgt, außer bei hai, hanno, ho*  ('h' only appears at the beginning of some pres. indic. forms of 'avere' -- with the exception of some unimportant loanwords in modern Italian (which I choose to ignore))
    68  * hyphen/soft hyphen wird vor whitespace getilgt, soft hyphen wird durch hyphen ersetzt
    69 
    70 Diese Regeln normalisieren in Richtung der heutigen italienischen Orthographie. Beachte den Unterschied zur einfachen Regel "v wird u" im Lateinischen.
    71 
    72 Wortanfang definiert als whitespace oder ’ (2019) oder \
    73 
    74 Programmfehler bei "v" (falsch, richtig):
    75 {{{
    76 while ((((c_n = s.charAt(y)) == '-') || (c_n == '\u00ad')) && (y++ > 0));
    77 while ((((c_n = s.charAt(y)) == '-') || (c_n == '\u00ad')) && (y++ < s.length() - 1));
    78 }}}
    79 
    80 || Ae || Æ (00C6)  ||
    81 || Oe || Œ (0152)  ||
    82 || ae || æ (00E6)  ||
    83 || oe || œ (0153)  ||
    84 || s || ſ (017F)  ||
    85 || ss || ß (00DF)  ||
    86 || À (00C0) || Á (00C1)  ||
    87 || È (00C8) || É (00C9)  ||
    88 || Ì (00CC) || Í (00CD)  ||
    89 || Ò (00D2) || Ó (00D3)  ||
    90 || Ù (00D9) || Ú (00DA)  ||
    91 || à (00E0) || á (00E1)  ||
    92 || è (00E8) || é (00E9)  ||
    93 || ì (00EC) || í (00ED)  ||
    94 || ò (00F2) || ó (00F3)  ||
    95 || ù (00F9) || ú (00FA)  ||
    96 
    97 also:
    98  * Diphthongzeichen aufgelöst, ſ und ß (Teilmenge der Regeln für Latein)
    99  * Gravis wird zu Akut (anders als bei Latein)
    100 
    101 Backend:
    102 
    103 Regeln für u, j, v, t, h, hyphen nicht übertragen wegen Programmfehler(n)
    104 
    105 stattdessen die lateinischen Regeln übernommen (allerdings ohne j, v, "q;", ";", combining characters, soft hyphen, 〈 〉). 
    106 Die zusätzlichen e-Varianten sind ebenfalls nicht übernommen, stattdessen eine neue Regel "ẍ (1E8D) wird zu e" (gemeint ist ẽ (1EBD), was auch in den zusätzlichen Regeln für Latein vorkommt).
    107 
    108 === Englisch ===
    109 
    110 Englisch fehlt in Arboreal.
    111 
    112 Backend: wie bei Latein; wieder ohne j, v, "q;", ";", aber mit combining characters, soft hyphen, 〈 〉. Wieder zusätzlich mit ẍ (1E8D).
    113 
    114 
    115 === Französisch ===
    116 
    117 Regeln für u und v genau wie bei Italienisch, mit dem gleichen Programmfehler.
    118 
    119 || -- || hyphen (002D) soft hyphen (00AD) ||
    120 || ae || æ (00E6)  ||
    121 || s || ſ (017F)  ||
    122 || ss || ß (00DF)  ||
    123 
    124 Beachte: œ wird nicht normalisiert.
    125 
    126 Backend: Regeln für u und v weggelassen. Ansonsten wie bei Arboreal.
    127 
    128 === Deutsch ===
    129 
    130 In Arboreal eine andere Definition für Wortanfang ("beginWord") als zum Beispiel im Italienischen: nach Whitespace und . , : ; ? ! ( < [ ' " ‘ “ (wird nur dafür verwendet, das Wort ab dem zweiten Buchstaben in Kleinbuchstaben umzuwandeln)
    131 
    132 || -- || hyphen (002D) soft hyphen (00AD)  ||
    133 || Ae || Ä (00C4)  ||
    134 || Oe || Ö (00D6)  ||
    135 || Ue || Ü (00DC)  ||
    136 || ae || ä (00E4)  ||
    137 || e || é (00E9)  ||
    138 || oe || ö (00F6)  ||
    139 || ss || ß (00DF)  ||
    140 || ue || ü (00FC)  ||
    141 
    142 Backend: genauso
    143 
    144 === Chinesisch ===
    145 
    146 || " " || " " (3000)  ||
    147 || , || 、 (3001)  ||
    148 || . || 。 (3002)  ||
    149 || 1 || ¹ (00B9)  ||
    150 || 2 || ² (00B2)  ||
    151 || 3 || ³ (00B3)  ||
    152 || 4 || ⁴ (2074)  ||
    153 || 5 || ⁵ (2075)  ||
    154 
    155 Die Zeile, die ZWS (200B) tilgt, ist auskommentiert mit dem Kommentar "BREAKS EVERYTHING!"
    156 
    157 Backend: Genauso, allerdings sind die Zeilen für " " (3000)  、(3001) 。(3002) als Folge von Ticket [https://it-dev.mpiwg-berlin.mpg.de/tracs/mpdl-project-software/ticket/32 #32] auskommentiert.
    158 
    159 
    160 === Arabisch ===
    161 
    162 Trage ich bei Interesse nach.
    163 
    164 (fehlt im Backend)
    165 
    166 === Keilschrift ===
    167 
    168 Das meint:
    169  * akk: !Akkadisch/Akkadian
    170  * sux: !Sumerisch/Sumerian
    171  * elx: !Elamisch/Elamite
    172  * hit: !Hethitisch/Hittite
    173  * ura: !Urartäisch/Urartian? (ISO 639-3: ura ist eine Amazonas-Sprache (Urarina), Urartäisch ist xur)
    174  * peo: !Altpersisch/Old Persian
    175  * uga: !Ugaritisch/Ugaritic
    176  * qam: local use
    177  * qcu: local use
    178  * qhu: local use
    179  * qpc: local use
    180 
    181 Trage ich bei Interesse nach.
    182 
    183 (Backend: wie bei Arboreal)
    184 
    185 === Griechisch ===
    186 
    187 || σ (03C3) || ς (03C2)  ||
    188 || -- || < > [ ] 1 2 ||
    189 || ά (1F71) || ά (03AC)  ||
    190 || έ (1F73) || έ (03AD)  ||
    191 || ή (1F75) || ή (03AE)  ||
    192 || ί (1F77) || ί (03AF)  ||
    193 || ό (1F79) || ό (03CC)  ||
    194 || ύ (1F7B) || ύ (03CD)  ||
    195 || ώ (1F7D) || ώ (03CE)  ||
    196 || -- || hyphen (002D) soft hyphen (00AD)  ||
    197 
    198 Optisch identisch, aber "Tonos" (der monotonische Akzent im modernen Griechisch) wird zu "Oxia" (der Akut im Altgriechischen).
    199 
    200 Tippfehler: \uu1f7d statt \u1f7d bei ώ
    201 
    202 Backend: genauso; Tippfehler korrigiert
    203 
    204 
    205 === Griechisch ohne Diakritika ===
    206 
    207 Greek Atonic ("el_atonic") meint, dass alle Diakritika, d.h. Akzente, Spiritus, Trema ("dialytika", ϋ 03CB) und Iota subscriptum/adscriptum, weggelassen werden. Normales modernes Griechisches hat dagegen noch Betonungszeichen (Tonos) bei mehrsilbigen Wörtern.
    208 
    209 || σ (03C3) || ς (03C2)  ||
    210 
    211 "map characters with diacritics to their plain equivalent":
    212 
    213 || Α (0391) || Ἀ (1F08) Ἁ (1F09) Ἂ (1F0A) Ἃ (1F0B) Ἄ (1F0C) Ἅ (1F0D) Ἆ (1F0E) Ἇ (1F0F) [[BR]] ᾈ (1F88) ᾉ (1F89) ᾊ (1F8A) ᾋ (1F8B) ᾌ (1F8C) ᾍ (1F8D) ᾎ (1F8E) ᾏ (1F8F) [[BR]] Ὰ (1FBA) Ά (1FBB) ᾼ (1FBC)  ||
    214 || Ε (0395) || Ἐ (1F18) Ἑ (1F19) Ἒ (1F1A) Ἓ (1F1B) Ἔ (1F1C) Ἕ (1F1D)  ||
    215 || Η (0397) || Ἠ (1F28) Ἡ (1F29) Ἢ (1F2A) Ἣ (1F2B) Ἤ (1F2C) Ἥ (1F2D) Ἦ (1F2E) Ἧ (1F2F) [[BR]] ᾘ (1F98) ᾙ (1F99) ᾚ (1F9A) ᾛ (1F9B) ᾜ (1F9C) ᾝ (1F9D) ᾞ (1F9E) ᾟ (1F9F) [[BR]] Ὴ (1FCA) Ή (1FCB) ῌ (1FCC)  ||
    216 || Ι (0399) || Ϊ (03AA) Ἰ (1F38) Ἱ (1F39) Ἲ (1F3A) Ἳ (1F3B) Ἴ (1F3C) Ἵ (1F3D) Ἶ (1F3E) [[BR]] Ἷ (1F3F) Ὶ (1FDA)  ||
    217 || Ο (039F) || Ὀ (1F48) Ὁ (1F49) Ὂ (1F4A) Ὃ (1F4B) Ὄ (1F4C) Ὅ (1F4D) Ί (1FDB) Ὸ (1FF8) [[BR]] Ό (1FF9)  ||
    218 || Ρ (03A1) || Ῥ (1FEC)  ||
    219 || Υ (03A5) || Ϋ (03AB) ὘ (1F58) Ὑ (1F59) ὚ (1F5A) Ὓ (1F5B) ὜ (1F5C) Ὕ (1F5D) ὞ (1F5E) [[BR]] Ὗ (1F5F) Ὺ (1FEA) Ύ (1FEB)  ||
    220 || Ω (03A9) || Ὠ (1F68) Ὡ (1F69) Ὢ (1F6A) Ὣ (1F6B) Ὤ (1F6C) Ὥ (1F6D) Ὦ (1F6E) Ὧ (1F6F) [[BR]] ᾨ (1FA8) ᾩ (1FA9) ᾪ (1FAA) ᾫ (1FAB) ᾬ (1FAC) ᾭ (1FAD) ᾮ (1FAE) ᾯ (1FAF)[[BR]]  Ὼ (1FFA) Ώ (1FFB) ῼ (1FFC)  ||
    221 || α (03B1) || ἀ (1F00) ἁ (1F01) ἂ (1F02) ἃ (1F03) ἄ (1F04) ἅ (1F05) ἆ (1F06) ἇ (1F07) [[BR]] ὰ (1F70) ά (1F71) ᾀ (1F80) ᾁ (1F81) ᾂ (1F82) ᾃ (1F83) ᾄ (1F84) ᾅ (1F85) [[BR]] ᾆ (1F86) ᾇ (1F87) ᾲ (1FB2) ᾳ (1FB3) ᾴ (1FB4) ᾶ (1FB6) ᾷ (1FB7)  ||
    222 || ε (03B5) || ἐ (1F10) ἑ (1F11) ἒ (1F12) ἓ (1F13) ἔ (1F14) ἕ (1F15) ὲ (1F72) έ (1F73)  ||
    223 || η (03B7) || ἠ (1F20) ἡ (1F21) ἢ (1F22) ἣ (1F23) ἤ (1F24) ἥ (1F25) ἦ (1F26) ἧ (1F27) [[BR]] ὴ (1F74) ή (1F75) ᾐ (1F90) ᾑ (1F91) ᾒ (1F92) ᾓ (1F93) ᾔ (1F94) ᾕ (1F95) [[BR]] ᾖ (1F96) ᾗ (1F97) ῂ (1FC2) ῃ (1FC3) ῄ (1FC4) ῆ (1FC6) ῇ (1FC7)  ||
    224 || ι (03B9) || ϊ (03CA) ἰ (1F30) ἱ (1F31) ἲ (1F32) ἳ (1F33) ἴ (1F34) ἵ (1F35) ἶ (1F36) [[BR]] ἷ (1F37) ὶ (1F76) ί (1F77) ῒ (1FD2) ΐ (1FD3) ῖ (1FD6) ῗ (1FD7)  ||
    225 || ο (03BF) || ό (03CC) ὀ (1F40) ὁ (1F41) ὂ (1F42) ὃ (1F43) ὄ (1F44) ὅ (1F45) ὸ (1F78) [[BR]] ό (1F79)  ||
    226 || ρ (03C1) || ῤ (1FE4) ῥ (1FE5)  ||
    227 || υ (03C5) || ϋ (03CB) ύ (03CD) ὐ (1F50) ὑ (1F51) ὒ (1F52) ὓ (1F53) ὔ (1F54) ὕ (1F55) [[BR]] ὖ (1F56) ὗ (1F57) ὺ (1F7A) ύ (1F7B) ῢ (1FE2) ΰ (1FE3) ῦ (1FE6) ῧ (1FE7)  ||
    228 || ω (03C9) || ώ (03CE) ὠ (1F60) ὡ (1F61) ὢ (1F62) ὣ (1F63) ὤ (1F64) ὥ (1F65) ὦ (1F66) [[BR]] ὧ (1F67) ὼ (1F7C) ώ (1F7D) ᾠ (1FA0) ᾡ (1FA1) ᾢ (1FA2) ᾣ (1FA3) ᾤ (1FA4)[[BR]]  ᾥ (1FA5) ᾦ (1FA6) ᾧ (1FA7) ῲ (1FF2) ῳ (1FF3) ῴ (1FF4) ῶ (1FF6) ῷ (1FF7)  ||
    229 
    230 Außerdem
    231 || -- || < > [ ] ||
    232 || -- || hyphen (002D) soft hyphen (00AD)  ||
    233 
    234 (aber nicht 1 und 2)
    235 
    236 Außerdem einige fehlerhafte Einträge:
    237 
    238 || ΁ (0381) || ά (03AC)  ||
    239 || ΅ (0385) || έ (03AD)  ||
    240 || · (0387) || ή (03AE)  ||
    241 || Ή (0389) || ί (03AF)  ||
    242 
    243 Diese Einträge enthalten denselben Tippfehler; gemeint ist
    244 
    245 || α (03B1) || ά (03AC)  ||
    246 || ε (03B5) || έ (03AD)  ||
    247 || η (03B7) || ή (03AE)  ||
    248 || ι (03B9) || ί (03AF)  ||
    249 
    250 Diese Regeln sind offenbar nicht oft verwendet worden.
    251 
    252 
    253 Backend: genauso
    254 
    255 === Weiteres ===
    256 
    257 In Arboreal werden alle Buchstaben eines Wortes außer dem ersten in Kleinbuchstaben normalisiert. (Ausnahme natürlich u.a. Chinesisch.) In der Backend-Version wurde dies weggelassen.
    258 
    259 In der Backend-Version gibt es zusätzlich eine Methode "deNormalizeToRegExpr". Diese Methode erstellt Teile von regexes, die für Latein, Deutsch und Englisch wohl aus einer normalisierten Form alle Wortformen finden soll, die zu dieser Wortform normalisiert werden. Die Implementation scheint allerdings fehlerhaft zu sein. Ein Beispiel: Wasserstraße wird normalisiert zu Wasserstrasse, daraus wird in "deNormalizeToRegExpr" wiederum "Waßerstraße|Wass[eé]rstrass[eé]". Es werden also die Wortformen Waßerstraße, Wasserstrasse, Wassérstrasse, Wasserstrassé und Wassérstrassé gefunden, aber nicht die originale Form Wasserstraße.
    260 
    261 == 2. Was bedeutet das? ==
    262 
    263 Die wichtigste Frage ist, wo die Normalisierungsregeln überhaupt verwendet werden. Siehe dazu Abschnitt 3.
    264 
    265 == 3. Wann wird zurzeit normalisiert? ==
    266 
    267 Die wichtigste Erkenntnis ist, dass die Arboreal-Regeln gar nicht für die Textanzeige gedacht sind, aber im Backend dafür verwendet werden.