comparison software/mpdl-services/mpiwg-mpdl-lt/bin/de/mpg/mpiwg/berlin/mpdl/lt/text/norm/lang/MpdlNormalizerLexFR.lex @ 23:e845310098ba

diverse Korrekturen
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 27 Nov 2012 12:35:19 +0100
parents
children
comparison
equal deleted inserted replaced
22:6a45a982c333 23:e845310098ba
1 /*
2 * Normalization rules for French text
3 * [this is a JFlex specification]
4 *
5 * Wolfgang Schmidle
6 * version 2011-07-12
7 *
8 */
9
10 package de.mpg.mpiwg.berlin.mpdl.lt.text.norm.lang;
11
12 %%
13
14 %public
15 %class MpdlNormalizerLexFR
16 %type java.lang.String
17 %unicode
18
19 // French: fr
20
21 %states DISP, DICT, SEARCH
22 %state CELEX
23
24 %{
25 private String original = "";
26 private String normalized = "";
27 private int problem = 0;
28
29 private void add (String norm) {
30 original += yytext();
31 normalized += norm;
32 }
33
34 private static final String LB = "[\u002d\u00ad] ";
35 %}
36
37 hyphen = [-\u{00ad}] // hyphen and soft hyphen
38 LB = {hyphen} \u0020
39 // lb = ({hyphen} \u0020)?
40
41 END = \n
42
43 Alphabet = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
44
45 %%
46
47 // jump over empty xml elements
48 "<"[^><]+"/>" { add(yytext()); }
49 "-<"[^><]+"/>" { add(yytext()); }
50 "<"[^><]+"></"[^><]+">" { add(yytext()); }
51 "-<"[^><]+"></"[^><]+">" { add(yytext()); }
52
53 <DISP, DICT, SEARCH, CELEX> {
54
55 ſ { add("s"); }
56 ß { add("ss"); }
57 æ { add("ae"); }
58
59 }
60
61 <CELEX> {
62
63 [œŒ] { add("oe"); }
64 [áàâ] { add("a"); }
65 [éèê] { add("e"); }
66 [íìî] { add("i"); }
67 [óòô] { add("o"); }
68 [úùû] { add("u"); }
69 ’ { add(""); }
70
71 {Alphabet} { add(yytext()); }
72
73 . { problem = 1; add(yytext()); } // in particular "@"
74
75 }
76
77 // default
78
79 @ { problem = 1; add(yytext()); }
80 {LB} { add(yytext()); }
81 . { add(yytext()); }
82
83
84 <DISP> {
85
86 {END} {
87 switch (problem) {
88 case 1: return original;
89 default: return normalized;
90 }
91 }
92 }
93
94 <DICT, CELEX> {
95
96 {END} {
97 switch (problem) {
98 case 1: return "";
99 default: return normalized.replaceAll(LB, "");
100 }
101 }
102 }
103
104 <SEARCH> {
105
106 {END} {
107 switch (problem) {
108 case 1: return original;
109 default: return normalized.replaceAll(LB, "").toLowerCase();
110 }
111 }
112 }
113
114
115 /*
116
117 Annahmen:
118 - die Routine wird wortweise aufgerufen, mit einem \n am Ende des Strings
119 - Zeilenumbrüche innerhalb des Wortes sind als hyphen/soft hyphen plus space markiert
120
121 TO DO:
122
123 FR: richtig? vollständig?
124
125 */