Lucene.Net  3.0.3
Lucene.Net is a .NET port of the Java Lucene Indexing Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties
GermanStemmer.cs
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 // This file was generated automatically by the Snowball to Java compiler
19 using System;
20 using Among = SF.Snowball.Among;
21 using SnowballProgram = SF.Snowball.SnowballProgram;
22 namespace SF.Snowball.Ext
23 {
24 #pragma warning disable 162
25 
28  {
29  public GermanStemmer()
30  {
31  InitBlock();
32  }
33  private void InitBlock()
34  {
35  a_0 = new Among[]{new Among("", - 1, 6, "", this), new Among("U", 0, 2, "", this), new Among("Y", 0, 1, "", this), new Among("\u00E4", 0, 3, "", this), new Among("\u00F6", 0, 4, "", this), new Among("\u00FC", 0, 5, "", this)};
36  a_1 = new Among[]{new Among("e", - 1, 1, "", this), new Among("em", - 1, 1, "", this), new Among("en", - 1, 1, "", this), new Among("ern", - 1, 1, "", this), new Among("er", - 1, 1, "", this), new Among("s", - 1, 2, "", this), new Among("es", 5, 1, "", this)};
37  a_2 = new Among[]{new Among("en", - 1, 1, "", this), new Among("er", - 1, 1, "", this), new Among("st", - 1, 2, "", this), new Among("est", 2, 1, "", this)};
38  a_3 = new Among[]{new Among("ig", - 1, 1, "", this), new Among("lich", - 1, 1, "", this)};
39  a_4 = new Among[]{new Among("end", - 1, 1, "", this), new Among("ig", - 1, 2, "", this), new Among("ung", - 1, 1, "", this), new Among("lich", - 1, 3, "", this), new Among("isch", - 1, 2, "", this), new Among("ik", - 1, 2, "", this), new Among("heit", - 1, 3, "", this), new Among("keit", - 1, 4, "", this)};
40  }
41 
42  private Among[] a_0;
43  private Among[] a_1;
44  private Among[] a_2;
45  private Among[] a_3;
46  private Among[] a_4;
47  private static readonly char[] g_v = new char[]{(char) (17), (char) (65), (char) (16), (char) (1), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (0), (char) (8), (char) (0), (char) (32), (char) (8)};
48  private static readonly char[] g_s_ending = new char[]{(char) (117), (char) (30), (char) (5)};
49  private static readonly char[] g_st_ending = new char[]{(char) (117), (char) (30), (char) (4)};
50 
51  private int I_p2;
52  private int I_p1;
53 
54  protected internal virtual void copy_from(GermanStemmer other)
55  {
56  I_p2 = other.I_p2;
57  I_p1 = other.I_p1;
58  base.copy_from(other);
59  }
60 
61  private bool r_prelude()
62  {
63  int v_1;
64  int v_2;
65  int v_3;
66  int v_4;
67  int v_5;
68  int v_6;
69  // (, line 28
70  // test, line 30
71  v_1 = cursor;
72  // repeat, line 30
73  while (true)
74  {
75  v_2 = cursor;
76  do
77  {
78  // (, line 30
79  // or, line 33
80  do
81  {
82  v_3 = cursor;
83  do
84  {
85  // (, line 31
86  // [, line 32
87  bra = cursor;
88  // literal, line 32
89  if (!(eq_s(1, "\u00DF")))
90  {
91  goto lab3_brk;
92  }
93  // ], line 32
94  ket = cursor;
95  // <-, line 32
96  slice_from("ss");
97  goto lab2_brk;
98  }
99  while (false);
100 
101 lab3_brk: ;
102 
103  cursor = v_3;
104  // next, line 33
105  if (cursor >= limit)
106  {
107  goto lab1_brk;
108  }
109  cursor++;
110  }
111  while (false);
112 
113 lab2_brk: ;
114 
115  goto replab0;
116  }
117  while (false);
118 
119 lab1_brk: ;
120 
121  cursor = v_2;
122  goto replab0_brk;
123 
124 replab0: ;
125  }
126 
127 replab0_brk: ;
128 
129  cursor = v_1;
130  // repeat, line 36
131  while (true)
132  {
133  v_4 = cursor;
134  do
135  {
136  // goto, line 36
137  while (true)
138  {
139  v_5 = cursor;
140  do
141  {
142  // (, line 36
143  if (!(in_grouping(g_v, 97, 252)))
144  {
145  goto lab7_brk;
146  }
147  // [, line 37
148  bra = cursor;
149  // or, line 37
150  do
151  {
152  v_6 = cursor;
153  do
154  {
155  // (, line 37
156  // literal, line 37
157  if (!(eq_s(1, "u")))
158  {
159  goto lab9_brk;
160  }
161  // ], line 37
162  ket = cursor;
163  if (!(in_grouping(g_v, 97, 252)))
164  {
165  goto lab9_brk;
166  }
167  // <-, line 37
168  slice_from("U");
169  goto lab8_brk;
170  }
171  while (false);
172 
173 lab9_brk: ;
174 
175  cursor = v_6;
176  // (, line 38
177  // literal, line 38
178  if (!(eq_s(1, "y")))
179  {
180  goto lab7_brk;
181  }
182  // ], line 38
183  ket = cursor;
184  if (!(in_grouping(g_v, 97, 252)))
185  {
186  goto lab7_brk;
187  }
188  // <-, line 38
189  slice_from("Y");
190  }
191  while (false);
192 
193 lab8_brk: ;
194 
195  cursor = v_5;
196  goto golab6_brk;
197  }
198  while (false);
199 
200 lab7_brk: ;
201 
202  cursor = v_5;
203  if (cursor >= limit)
204  {
205  goto lab5_brk;
206  }
207  cursor++;
208  }
209 
210 golab6_brk: ;
211 
212  goto replab4;
213  }
214  while (false);
215 
216 lab5_brk: ;
217 
218  cursor = v_4;
219  goto replab4_brk;
220 
221 replab4: ;
222  }
223 
224 replab4_brk: ;
225 
226  return true;
227  }
228 
229  private bool r_mark_regions()
230  {
231  // (, line 42
232  I_p1 = limit;
233  I_p2 = limit;
234  // gopast, line 47
235  while (true)
236  {
237  do
238  {
239  if (!(in_grouping(g_v, 97, 252)))
240  {
241  goto lab1_brk;
242  }
243  goto golab0_brk;
244  }
245  while (false);
246 
247 lab1_brk: ;
248 
249  if (cursor >= limit)
250  {
251  return false;
252  }
253  cursor++;
254  }
255 
256 golab0_brk: ;
257 
258  // gopast, line 47
259  while (true)
260  {
261  do
262  {
263  if (!(out_grouping(g_v, 97, 252)))
264  {
265  goto lab3_brk;
266  }
267  goto golab2_brk;
268  }
269  while (false);
270 
271 lab3_brk: ;
272 
273  if (cursor >= limit)
274  {
275  return false;
276  }
277  cursor++;
278  }
279 
280 golab2_brk: ;
281 
282  // setmark p1, line 47
283  I_p1 = cursor;
284  // try, line 48
285  do
286  {
287  // (, line 48
288  if (!(I_p1 < 3))
289  {
290  goto lab4_brk;
291  }
292  I_p1 = 3;
293  }
294  while (false);
295 
296 lab4_brk: ;
297 
298  // gopast, line 49
299  while (true)
300  {
301  do
302  {
303  if (!(in_grouping(g_v, 97, 252)))
304  {
305  goto lab6_brk;
306  }
307  goto golab5_brk;
308  }
309  while (false);
310 
311 lab6_brk: ;
312 
313  if (cursor >= limit)
314  {
315  return false;
316  }
317  cursor++;
318  }
319 
320 golab5_brk: ;
321 
322  // gopast, line 49
323  while (true)
324  {
325  do
326  {
327  if (!(out_grouping(g_v, 97, 252)))
328  {
329  goto lab8_brk;
330  }
331  goto golab7_brk;
332  }
333  while (false);
334 
335 lab8_brk: ;
336 
337  if (cursor >= limit)
338  {
339  return false;
340  }
341  cursor++;
342  }
343 
344 golab7_brk: ;
345 
346  // setmark p2, line 49
347  I_p2 = cursor;
348  return true;
349  }
350 
351  private bool r_postlude()
352  {
353  int among_var;
354  int v_1;
355  // repeat, line 53
356  while (true)
357  {
358  v_1 = cursor;
359  do
360  {
361  // (, line 53
362  // [, line 55
363  bra = cursor;
364  // substring, line 55
365  among_var = find_among(a_0, 6);
366  if (among_var == 0)
367  {
368  goto lab10_brk;
369  }
370  // ], line 55
371  ket = cursor;
372  switch (among_var)
373  {
374 
375  case 0:
376  goto lab10_brk;
377 
378  case 1:
379  // (, line 56
380  // <-, line 56
381  slice_from("y");
382  break;
383 
384  case 2:
385  // (, line 57
386  // <-, line 57
387  slice_from("u");
388  break;
389 
390  case 3:
391  // (, line 58
392  // <-, line 58
393  slice_from("a");
394  break;
395 
396  case 4:
397  // (, line 59
398  // <-, line 59
399  slice_from("o");
400  break;
401 
402  case 5:
403  // (, line 60
404  // <-, line 60
405  slice_from("u");
406  break;
407 
408  case 6:
409  // (, line 61
410  // next, line 61
411  if (cursor >= limit)
412  {
413  goto lab10_brk;
414  }
415  cursor++;
416  break;
417  }
418  goto replab1;
419  }
420  while (false);
421 
422 lab10_brk: ;
423 
424  cursor = v_1;
425  goto replab1_brk;
426 
427 replab1: ;
428  }
429 
430 replab1_brk: ;
431 
432  return true;
433  }
434 
435  private bool r_R1()
436  {
437  if (!(I_p1 <= cursor))
438  {
439  return false;
440  }
441  return true;
442  }
443 
444  private bool r_R2()
445  {
446  if (!(I_p2 <= cursor))
447  {
448  return false;
449  }
450  return true;
451  }
452 
453  private bool r_standard_suffix()
454  {
455  int among_var;
456  int v_1;
457  int v_2;
458  int v_3;
459  int v_4;
460  int v_5;
461  int v_6;
462  int v_7;
463  int v_8;
464  int v_9;
465  // (, line 71
466  // do, line 72
467  v_1 = limit - cursor;
468  do
469  {
470  // (, line 72
471  // [, line 73
472  ket = cursor;
473  // substring, line 73
474  among_var = find_among_b(a_1, 7);
475  if (among_var == 0)
476  {
477  goto lab0_brk;
478  }
479  // ], line 73
480  bra = cursor;
481  // call R1, line 73
482  if (!r_R1())
483  {
484  goto lab0_brk;
485  }
486  switch (among_var)
487  {
488 
489  case 0:
490  goto lab0_brk;
491 
492  case 1:
493  // (, line 75
494  // delete, line 75
495  slice_del();
496  break;
497 
498  case 2:
499  // (, line 78
500  if (!(in_grouping_b(g_s_ending, 98, 116)))
501  {
502  goto lab0_brk;
503  }
504  // delete, line 78
505  slice_del();
506  break;
507  }
508  }
509  while (false);
510 
511 lab0_brk: ;
512 
513  cursor = limit - v_1;
514  // do, line 82
515  v_2 = limit - cursor;
516  do
517  {
518  // (, line 82
519  // [, line 83
520  ket = cursor;
521  // substring, line 83
522  among_var = find_among_b(a_2, 4);
523  if (among_var == 0)
524  {
525  goto lab1_brk;
526  }
527  // ], line 83
528  bra = cursor;
529  // call R1, line 83
530  if (!r_R1())
531  {
532  goto lab1_brk;
533  }
534  switch (among_var)
535  {
536 
537  case 0:
538  goto lab1_brk;
539 
540  case 1:
541  // (, line 85
542  // delete, line 85
543  slice_del();
544  break;
545 
546  case 2:
547  // (, line 88
548  if (!(in_grouping_b(g_st_ending, 98, 116)))
549  {
550  goto lab1_brk;
551  }
552  // hop, line 88
553  {
554  int c = cursor - 3;
555  if (limit_backward > c || c > limit)
556  {
557  goto lab1_brk;
558  }
559  cursor = c;
560  }
561  // delete, line 88
562  slice_del();
563  break;
564  }
565  }
566  while (false);
567 
568 lab1_brk: ;
569 
570  cursor = limit - v_2;
571  // do, line 92
572  v_3 = limit - cursor;
573  do
574  {
575  // (, line 92
576  // [, line 93
577  ket = cursor;
578  // substring, line 93
579  among_var = find_among_b(a_4, 8);
580  if (among_var == 0)
581  {
582  goto lab2_brk;
583  }
584  // ], line 93
585  bra = cursor;
586  // call R2, line 93
587  if (!r_R2())
588  {
589  goto lab2_brk;
590  }
591  switch (among_var)
592  {
593 
594  case 0:
595 
596  goto lab2_brk;
597 
598  case 1:
599  // (, line 95
600  // delete, line 95
601  slice_del();
602  // try, line 96
603  v_4 = limit - cursor;
604  do
605  {
606  // (, line 96
607  // [, line 96
608  ket = cursor;
609  // literal, line 96
610  if (!(eq_s_b(2, "ig")))
611  {
612  cursor = limit - v_4;
613  goto lab3_brk;
614  }
615  // ], line 96
616  bra = cursor;
617  // not, line 96
618  {
619  v_5 = limit - cursor;
620  do
621  {
622  // literal, line 96
623  if (!(eq_s_b(1, "e")))
624  {
625  goto lab4_brk;
626  }
627  cursor = limit - v_4;
628  goto lab3_brk;
629  }
630  while (false);
631 
632 lab4_brk: ;
633 
634  cursor = limit - v_5;
635  }
636  // call R2, line 96
637  if (!r_R2())
638  {
639  cursor = limit - v_4;
640  goto lab3_brk;
641  }
642  // delete, line 96
643  slice_del();
644  }
645  while (false);
646 
647 lab3_brk: ;
648 
649  break;
650 
651  case 2:
652  // (, line 99
653  // not, line 99
654  {
655  v_6 = limit - cursor;
656  do
657  {
658  // literal, line 99
659  if (!(eq_s_b(1, "e")))
660  {
661  goto lab5_brk;
662  }
663  goto lab2_brk;
664  }
665  while (false);
666 
667 lab5_brk: ;
668 
669  cursor = limit - v_6;
670  }
671  // delete, line 99
672  slice_del();
673  break;
674 
675  case 3:
676  // (, line 102
677  // delete, line 102
678  slice_del();
679  // try, line 103
680  v_7 = limit - cursor;
681  do
682  {
683  // (, line 103
684  // [, line 104
685  ket = cursor;
686  // or, line 104
687  do
688  {
689  v_8 = limit - cursor;
690  do
691  {
692  // literal, line 104
693  if (!(eq_s_b(2, "er")))
694  {
695  goto lab8_brk;
696  }
697  goto lab7_brk;
698  }
699  while (false);
700 
701 lab8_brk: ;
702 
703  cursor = limit - v_8;
704  // literal, line 104
705  if (!(eq_s_b(2, "en")))
706  {
707  cursor = limit - v_7;
708  goto lab6_brk;
709  }
710  }
711  while (false);
712 
713 lab7_brk: ;
714 
715  // ], line 104
716  bra = cursor;
717  // call R1, line 104
718  if (!r_R1())
719  {
720  cursor = limit - v_7;
721  goto lab6_brk;
722  }
723  // delete, line 104
724  slice_del();
725  }
726  while (false);
727 
728 lab6_brk: ;
729 
730  break;
731 
732  case 4:
733  // (, line 108
734  // delete, line 108
735  slice_del();
736  // try, line 109
737  v_9 = limit - cursor;
738  do
739  {
740  // (, line 109
741  // [, line 110
742  ket = cursor;
743  // substring, line 110
744  among_var = find_among_b(a_3, 2);
745  if (among_var == 0)
746  {
747  cursor = limit - v_9;
748  goto lab9_brk;
749  }
750  // ], line 110
751  bra = cursor;
752  // call R2, line 110
753  if (!r_R2())
754  {
755  cursor = limit - v_9;
756  goto lab9_brk;
757  }
758  switch (among_var)
759  {
760 
761  case 0:
762  cursor = limit - v_9;
763  goto lab9_brk;
764 
765  case 1:
766  // (, line 112
767  // delete, line 112
768  slice_del();
769  break;
770  }
771  }
772  while (false);
773 
774 lab9_brk: ;
775 
776  break;
777  }
778  }
779  while (false);
780 
781 lab2_brk: ;
782 
783  cursor = limit - v_3;
784  return true;
785  }
786 
787  public override bool Stem()
788  {
789  int v_1;
790  int v_2;
791  int v_3;
792  int v_4;
793  // (, line 122
794  // do, line 123
795  v_1 = cursor;
796  do
797  {
798  // call prelude, line 123
799  if (!r_prelude())
800  {
801  goto lab0_brk;
802  }
803  }
804  while (false);
805 
806 lab0_brk: ;
807 
808  cursor = v_1;
809  // do, line 124
810  v_2 = cursor;
811  do
812  {
813  // call mark_regions, line 124
814  if (!r_mark_regions())
815  {
816  goto lab1_brk;
817  }
818  }
819  while (false);
820 
821 lab1_brk: ;
822 
823  cursor = v_2;
824  // backwards, line 125
825  limit_backward = cursor; cursor = limit;
826  // do, line 126
827  v_3 = limit - cursor;
828  do
829  {
830  // call standard_suffix, line 126
831  if (!r_standard_suffix())
832  {
833  goto lab2_brk;
834  }
835  }
836  while (false);
837 
838 lab2_brk: ;
839 
840  cursor = limit - v_3;
841  cursor = limit_backward; // do, line 127
842  v_4 = cursor;
843  do
844  {
845  // call postlude, line 127
846  if (!r_postlude())
847  {
848  goto lab3_brk;
849  }
850  }
851  while (false);
852 
853 lab3_brk: ;
854 
855  cursor = v_4;
856  return true;
857  }
858  }
859 }