TraceLab Component Library
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties
PortugalStemmer.cs
Go to the documentation of this file.
1 /*
2  * Port of Snowball stemmers on C#
3  * Original stemmers can be found on http://snowball.tartarus.org
4  * Licence still BSD: http://snowball.tartarus.org/license.php
5  *
6  * Most of stemmers are ported from Java by Iveonik Systems ltd. (www.iveonik.com)
7  */
8 using System;
9 using System.Collections.Generic;
10 using System.Text;
11 
12 namespace TraceLab.Components.DevelopmentKit.Preprocessors.Stemmers.Snowball.Languages
13 {
18  {
19  private readonly static PortugalStemmer methodObject = new PortugalStemmer();
20 
21  private readonly static Among[] a_0 =
22  {
23  new Among ( "", -1, 3, null ),
24  new Among ( "\u00E3", 0, 1, null ),
25  new Among ( "\u00F5", 0, 2, null )
26  };
27 
28 
29  private readonly static Among[] a_1 =
30  {
31  new Among ( "", -1, 3, null ),
32  new Among ( "a~", 0, 1, null ),
33  new Among ( "o~", 0, 2, null )
34  };
35 
36 
37  private readonly static Among[] a_2 =
38  {
39  new Among ( "ic", -1, -1, null ),
40  new Among ( "ad", -1, -1, null ),
41  new Among ( "os", -1, -1, null ),
42  new Among ( "iv", -1, 1, null )
43  };
44 
45 
46  private readonly static Among[] a_3 =
47  {
48  new Among ( "ante", -1, 1, null ),
49  new Among ( "avel", -1, 1, null ),
50  new Among ( "\u00EDvel", -1, 1, null )
51  };
52 
53 
54  private readonly static Among[] a_4 =
55  {
56  new Among ( "ic", -1, 1, null ),
57  new Among ( "abil", -1, 1, null ),
58  new Among ( "iv", -1, 1, null )
59  };
60 
61 
62  private readonly static Among[] a_5 =
63  {
64  new Among ( "ica", -1, 1, null ),
65  new Among ( "\u00E2ncia", -1, 1, null ),
66  new Among ( "\u00EAncia", -1, 4, null ),
67  new Among ( "ira", -1, 9, null ),
68  new Among ( "adora", -1, 1, null ),
69  new Among ( "osa", -1, 1, null ),
70  new Among ( "ista", -1, 1, null ),
71  new Among ( "iva", -1, 8, null ),
72  new Among ( "eza", -1, 1, null ),
73  new Among ( "log\u00EDa", -1, 2, null ),
74  new Among ( "idade", -1, 7, null ),
75  new Among ( "ante", -1, 1, null ),
76  new Among ( "mente", -1, 6, null ),
77  new Among ( "amente", 12, 5, null ),
78  new Among ( "\u00E1vel", -1, 1, null ),
79  new Among ( "\u00EDvel", -1, 1, null ),
80  new Among ( "uci\u00F3n", -1, 3, null ),
81  new Among ( "ico", -1, 1, null ),
82  new Among ( "ismo", -1, 1, null ),
83  new Among ( "oso", -1, 1, null ),
84  new Among ( "amento", -1, 1, null ),
85  new Among ( "imento", -1, 1, null ),
86  new Among ( "ivo", -1, 8, null ),
87  new Among ( "a\u00E7a~o", -1, 1, null ),
88  new Among ( "ador", -1, 1, null ),
89  new Among ( "icas", -1, 1, null ),
90  new Among ( "\u00EAncias", -1, 4, null ),
91  new Among ( "iras", -1, 9, null ),
92  new Among ( "adoras", -1, 1, null ),
93  new Among ( "osas", -1, 1, null ),
94  new Among ( "istas", -1, 1, null ),
95  new Among ( "ivas", -1, 8, null ),
96  new Among ( "ezas", -1, 1, null ),
97  new Among ( "log\u00EDas", -1, 2, null ),
98  new Among ( "idades", -1, 7, null ),
99  new Among ( "uciones", -1, 3, null ),
100  new Among ( "adores", -1, 1, null ),
101  new Among ( "antes", -1, 1, null ),
102  new Among ( "a\u00E7o~es", -1, 1, null ),
103  new Among ( "icos", -1, 1, null ),
104  new Among ( "ismos", -1, 1, null ),
105  new Among ( "osos", -1, 1, null ),
106  new Among ( "amentos", -1, 1, null ),
107  new Among ( "imentos", -1, 1, null ),
108  new Among ( "ivos", -1, 8, null )
109  };
110 
111 
112 
113  private readonly static Among[] a_6 =
114  {
115  new Among ( "ada", -1, 1, null ),
116  new Among ( "ida", -1, 1, null ),
117  new Among ( "ia", -1, 1, null ),
118  new Among ( "aria", 2, 1, null ),
119  new Among ( "eria", 2, 1, null ),
120  new Among ( "iria", 2, 1, null ),
121  new Among ( "ara", -1, 1, null ),
122  new Among ( "era", -1, 1, null ),
123  new Among ( "ira", -1, 1, null ),
124  new Among ( "ava", -1, 1, null ),
125  new Among ( "asse", -1, 1, null ),
126  new Among ( "esse", -1, 1, null ),
127  new Among ( "isse", -1, 1, null ),
128  new Among ( "aste", -1, 1, null ),
129  new Among ( "este", -1, 1, null ),
130  new Among ( "iste", -1, 1, null ),
131  new Among ( "ei", -1, 1, null ),
132  new Among ( "arei", 16, 1, null ),
133  new Among ( "erei", 16, 1, null ),
134  new Among ( "irei", 16, 1, null ),
135  new Among ( "am", -1, 1, null ),
136  new Among ( "iam", 20, 1, null ),
137  new Among ( "ariam", 21, 1, null ),
138  new Among ( "eriam", 21, 1, null ),
139  new Among ( "iriam", 21, 1, null ),
140  new Among ( "aram", 20, 1, null ),
141  new Among ( "eram", 20, 1, null ),
142  new Among ( "iram", 20, 1, null ),
143  new Among ( "avam", 20, 1, null ),
144  new Among ( "em", -1, 1, null ),
145  new Among ( "arem", 29, 1, null ),
146  new Among ( "erem", 29, 1, null ),
147  new Among ( "irem", 29, 1, null ),
148  new Among ( "assem", 29, 1, null ),
149  new Among ( "essem", 29, 1, null ),
150  new Among ( "issem", 29, 1, null ),
151  new Among ( "ado", -1, 1, null ),
152  new Among ( "ido", -1, 1, null ),
153  new Among ( "ando", -1, 1, null ),
154  new Among ( "endo", -1, 1, null ),
155  new Among ( "indo", -1, 1, null ),
156  new Among ( "ara~o", -1, 1, null ),
157  new Among ( "era~o", -1, 1, null ),
158  new Among ( "ira~o", -1, 1, null ),
159  new Among ( "ar", -1, 1, null ),
160  new Among ( "er", -1, 1, null ),
161  new Among ( "ir", -1, 1, null ),
162  new Among ( "as", -1, 1, null ),
163  new Among ( "adas", 47, 1, null ),
164  new Among ( "idas", 47, 1, null ),
165  new Among ( "ias", 47, 1, null ),
166  new Among ( "arias", 50, 1, null ),
167  new Among ( "erias", 50, 1, null ),
168  new Among ( "irias", 50, 1, null ),
169  new Among ( "aras", 47, 1, null ),
170  new Among ( "eras", 47, 1, null ),
171  new Among ( "iras", 47, 1, null ),
172  new Among ( "avas", 47, 1, null ),
173  new Among ( "es", -1, 1, null ),
174  new Among ( "ardes", 58, 1, null ),
175  new Among ( "erdes", 58, 1, null ),
176  new Among ( "irdes", 58, 1, null ),
177  new Among ( "ares", 58, 1, null ),
178  new Among ( "eres", 58, 1, null ),
179  new Among ( "ires", 58, 1, null ),
180  new Among ( "asses", 58, 1, null ),
181  new Among ( "esses", 58, 1, null ),
182  new Among ( "isses", 58, 1, null ),
183  new Among ( "astes", 58, 1, null ),
184  new Among ( "estes", 58, 1, null ),
185  new Among ( "istes", 58, 1, null ),
186  new Among ( "is", -1, 1, null ),
187  new Among ( "ais", 71, 1, null ),
188  new Among ( "eis", 71, 1, null ),
189  new Among ( "areis", 73, 1, null ),
190  new Among ( "ereis", 73, 1, null ),
191  new Among ( "ireis", 73, 1, null ),
192  new Among ( "\u00E1reis", 73, 1, null ),
193  new Among ( "\u00E9reis", 73, 1, null ),
194  new Among ( "\u00EDreis", 73, 1, null ),
195  new Among ( "\u00E1sseis", 73, 1, null ),
196  new Among ( "\u00E9sseis", 73, 1, null ),
197  new Among ( "\u00EDsseis", 73, 1, null ),
198  new Among ( "\u00E1veis", 73, 1, null ),
199  new Among ( "\u00EDeis", 73, 1, null ),
200  new Among ( "ar\u00EDeis", 84, 1, null ),
201  new Among ( "er\u00EDeis", 84, 1, null ),
202  new Among ( "ir\u00EDeis", 84, 1, null ),
203  new Among ( "ados", -1, 1, null ),
204  new Among ( "idos", -1, 1, null ),
205  new Among ( "amos", -1, 1, null ),
206  new Among ( "\u00E1ramos", 90, 1, null ),
207  new Among ( "\u00E9ramos", 90, 1, null ),
208  new Among ( "\u00EDramos", 90, 1, null ),
209  new Among ( "\u00E1vamos", 90, 1, null ),
210  new Among ( "\u00EDamos", 90, 1, null ),
211  new Among ( "ar\u00EDamos", 95, 1, null ),
212  new Among ( "er\u00EDamos", 95, 1, null ),
213  new Among ( "ir\u00EDamos", 95, 1, null ),
214  new Among ( "emos", -1, 1, null ),
215  new Among ( "aremos", 99, 1, null ),
216  new Among ( "eremos", 99, 1, null ),
217  new Among ( "iremos", 99, 1, null ),
218  new Among ( "\u00E1ssemos", 99, 1, null ),
219  new Among ( "\u00EAssemos", 99, 1, null ),
220  new Among ( "\u00EDssemos", 99, 1, null ),
221  new Among ( "imos", -1, 1, null ),
222  new Among ( "armos", -1, 1, null ),
223  new Among ( "ermos", -1, 1, null ),
224  new Among ( "irmos", -1, 1, null ),
225  new Among ( "\u00E1mos", -1, 1, null ),
226  new Among ( "ar\u00E1s", -1, 1, null ),
227  new Among ( "er\u00E1s", -1, 1, null ),
228  new Among ( "ir\u00E1s", -1, 1, null ),
229  new Among ( "eu", -1, 1, null ),
230  new Among ( "iu", -1, 1, null ),
231  new Among ( "ou", -1, 1, null ),
232  new Among ( "ar\u00E1", -1, 1, null ),
233  new Among ( "er\u00E1", -1, 1, null ),
234  new Among ( "ir\u00E1", -1, 1, null )
235  };
236 
237 
238 
239  private readonly static Among[] a_7 =
240  {
241  new Among ( "a", -1, 1, null ),
242  new Among ( "i", -1, 1, null ),
243  new Among ( "o", -1, 1, null ),
244  new Among ( "os", -1, 1, null ),
245  new Among ( "\u00E1", -1, 1, null ),
246  new Among ( "\u00ED", -1, 1, null ),
247  new Among ( "\u00F3", -1, 1, null )
248  };
249 
250 
251  private readonly static Among[] a_8 =
252  {
253  new Among ( "e", -1, 1, null ),
254  new Among ( "\u00E7", -1, 2, null ),
255  new Among ( "\u00E9", -1, 1, null ),
256  new Among ( "\u00EA", -1, 1, null )
257  };
258 
259 
260  private static readonly char[] g_v = {(char)17, (char)65, (char)16, (char)0, (char)0, (char)0, (char)0,
261  (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0,
262  (char)0, (char)0, (char)3, (char)19, (char)12, (char)2 };
263 
264  private int I_p2;
265  private int I_p1;
266  private int I_pV;
267 
268 
269  private void copy_from(PortugalStemmer other)
270  {
271  I_p2 = other.I_p2;
272  I_p1 = other.I_p1;
273  I_pV = other.I_pV;
274  base.copy_from(other);
275  }
276 
277 
278 
279  private bool r_prelude()
280  {
281  bool subroot = false;
282  int among_var;
283  int v_1;
284  // repeat, line 36
285  replab0: while (true)
286  {
287  v_1 = cursor;
288  do
289  {
290  // (, line 36
291  // [, line 37
292  bra = cursor;
293  // substring, line 37
294  among_var = find_among(a_0, 3);
295  if (among_var == 0)
296  {
297  break;
298  }
299  // ], line 37
300  ket = cursor;
301  switch (among_var)
302  {
303  case 0:
304  subroot = true;
305  break;
306  case 1:
307  // (, line 38
308  // <-, line 38
309  slice_from("a~");
310  break;
311  case 2:
312  // (, line 39
313  // <-, line 39
314  slice_from("o~");
315  break;
316  case 3:
317  // (, line 40
318  // next, line 40
319  if (cursor >= limit)
320  {
321  subroot = true;
322  break;
323  }
324  cursor++;
325  break;
326  }
327  if (subroot) { subroot = false; break; }
328  if (!subroot)
329  {
330  goto replab0;
331  }
332  } while (false);
333  cursor = v_1;
334  break;
335  }
336  return true;
337  }
338 
339 
340  private bool r_mark_regions()
341  {
342  bool subroot = false;
343  int v_1;
344  int v_2;
345  int v_3;
346  int v_6;
347  int v_8;
348  // (, line 44
349  I_pV = limit;
350  I_p1 = limit;
351  I_p2 = limit;
352  // do, line 50
353  v_1 = cursor;
354  do
355  {
356  // (, line 50
357  // or, line 52
358  do
359  {
360  v_2 = cursor;
361  do
362  {
363  // (, line 51
364  if (!(in_grouping(g_v, 97, 250)))
365  {
366  break;
367  }
368  // or, line 51
369  do
370  {
371  v_3 = cursor;
372  do
373  {
374  // (, line 51
375  if (!(out_grouping(g_v, 97, 250)))
376  {
377  break;
378  }
379  // gopast, line 51
380  // golab5:
381  while (true)
382  {
383  do
384  {
385  if (!(in_grouping(g_v, 97, 250)))
386  {
387  break;
388  }
389  subroot = true;
390  if (subroot) break;
391  } while (false);
392  if (subroot) { subroot = false; break; }
393  if (cursor >= limit)
394  {
395  subroot = true;
396  break;
397  }
398  cursor++;
399  }
400  if (subroot) { subroot = false; break; }
401  subroot = true;
402  if (subroot) break;
403  } while (false);
404  if (subroot) { subroot = false; break; }
405  cursor = v_3;
406  // (, line 51
407  if (!(in_grouping(g_v, 97, 250)))
408  {
409  subroot = true;
410  break;
411  }
412  // gopast, line 51
413  while (true)
414  {
415  do
416  {
417  if (!(out_grouping(g_v, 97, 250)))
418  {
419  break;
420  }
421  subroot = true;
422  if (subroot) break;
423  } while (false);
424  if (subroot) { subroot = false; break; }
425  if (cursor >= limit)
426  {
427  subroot = true;
428  break;
429  }
430  cursor++;
431  }
432  } while (false);
433  if (subroot) { subroot = false; break; }
434  subroot = true;
435  if (subroot) break;
436  } while (false);
437  if (subroot) { subroot = false; break; }
438  cursor = v_2;
439  // (, line 53
440  if (!(out_grouping(g_v, 97, 250)))
441  {
442  subroot = true;
443  break;
444  }
445  // or, line 53
446  do
447  {
448  v_6 = cursor;
449  do
450  {
451  // (, line 53
452  if (!(out_grouping(g_v, 97, 250)))
453  {
454  break;
455  }
456  // gopast, line 53
457  while (true)
458  {
459  do
460  {
461  if (!(in_grouping(g_v, 97, 250)))
462  {
463  break;
464  }
465  subroot = true;
466  if (subroot) break;
467  } while (false);
468  if (subroot) { subroot = false; break; }
469  if (cursor >= limit)
470  {
471  subroot = false;
472  break;
473  }
474  cursor++;
475  }
476  if (subroot) { subroot = false; break; }
477  subroot = true;
478  if (subroot) break;
479  } while (false);
480  if (subroot) { subroot = false; break; }
481  cursor = v_6;
482  // (, line 53
483  if (!(in_grouping(g_v, 97, 250)))
484  {
485  subroot = true;
486  break;
487  }
488  // next, line 53
489  if (cursor >= limit)
490  {
491  subroot = true;
492  break;
493  }
494  cursor++;
495  } while (false);
496  } while (false);
497  if (subroot) { subroot = false; break; } //***lab0
498  // setmark pV, line 54
499  I_pV = cursor;
500  } while (false);
501  cursor = v_1;
502  // do, line 56
503  v_8 = cursor;
504  do
505  {
506  // (, line 56
507  // gopast, line 57
508  while (true)
509  {
510  do
511  {
512  if (!(in_grouping(g_v, 97, 250)))
513  {
514  break;
515  }
516  subroot = true;
517  if (subroot) break;
518  } while (false);
519  if (subroot) { subroot = false; break; }
520  if (cursor >= limit)
521  {
522  subroot = true;
523  break;
524  }
525  cursor++;
526  }
527  if (subroot) { subroot = false; break; }
528  // gopast, line 57
529  while (true)
530  {
531  do
532  {
533  if (!(out_grouping(g_v, 97, 250)))
534  {
535  break;
536  }
537  subroot = true;
538  if (subroot) break;
539  } while (false);
540  if (subroot) { subroot = false; break; }
541  if (cursor >= limit)
542  {
543  subroot = true;
544  break;
545  }
546  cursor++;
547  }
548  if (subroot) { subroot = false; break; }
549  // setmark p1, line 57
550  I_p1 = cursor;
551  // gopast, line 58
552  while (true)
553  {
554  do
555  {
556  if (!(in_grouping(g_v, 97, 250)))
557  {
558  break;
559  }
560  subroot = true;
561  if (subroot) break;
562  } while (false);
563  if (subroot) { subroot = false; break; }
564  if (cursor >= limit)
565  {
566  subroot = true;
567  break;
568  }
569  cursor++;
570  }
571  if (subroot) { subroot = false; break; }
572  // gopast, line 58
573  while (true)
574  {
575  do
576  {
577  if (!(out_grouping(g_v, 97, 250)))
578  {
579  break;
580  }
581  subroot = true;
582  if (subroot) break;
583  } while (false);
584  if (subroot) { subroot = false; break; }
585  if (cursor >= limit)
586  {
587  subroot = true;
588  break;
589  }
590  cursor++;
591  }
592  if (subroot) { subroot = false; break; }
593  // setmark p2, line 58
594  I_p2 = cursor;
595  } while (false);
596  cursor = v_8;
597  return true;
598  }
599 
600 
601  private bool r_postlude()
602  {
603  bool subroot = false;
604  int among_var;
605  int v_1;
606  // repeat, line 62
607  replab0: while (true)
608  {
609  v_1 = cursor;
610  //lab1:
611  do
612  {
613  // (, line 62
614  // [, line 63
615  bra = cursor;
616  // substring, line 63
617  among_var = find_among(a_1, 3);
618  if (among_var == 0)
619  {
620  break;
621  }
622  // ], line 63
623  ket = cursor;
624  switch (among_var)
625  {
626  case 0:
627  subroot = true;
628  break;
629  case 1:
630  // (, line 64
631  // <-, line 64
632  slice_from("\u00E3");
633  break;
634  case 2:
635  // (, line 65
636  // <-, line 65
637  slice_from("\u00F5");
638  break;
639  case 3:
640  // (, line 66
641  // next, line 66
642  if (cursor >= limit)
643  {
644  subroot = true;
645  break;
646  }
647  cursor++;
648  break;
649  }
650  if (subroot) { subroot = false; break; }
651  else if (!subroot)
652  {
653  goto replab0;
654  }
655  } while (false);
656  cursor = v_1;
657  break;
658  }
659  return true;
660  }
661 
662  private bool r_RV()
663  {
664  if (!(I_pV <= cursor))
665  {
666  return false;
667  }
668  return true;
669  }
670 
671  private bool r_R1()
672  {
673  if (!(I_p1 <= cursor))
674  {
675  return false;
676  }
677  return true;
678  }
679 
680  private bool r_R2()
681  {
682  if (!(I_p2 <= cursor))
683  {
684  return false;
685  }
686  return true;
687  }
688 
689 
690  private bool r_standard_suffix()
691  {
692  bool subroot = false;
693  int among_var;
694  int v_1;
695  int v_2;
696  int v_3;
697  int v_4;
698  // (, line 76
699  // [, line 77
700  ket = cursor;
701  // substring, line 77
702  among_var = find_among_b(a_5, 45);
703  if (among_var == 0)
704  {
705  return false;
706  }
707  // ], line 77
708  bra = cursor;
709  switch (among_var)
710  {
711  case 0:
712  return false;
713  case 1:
714  // (, line 92
715  // call R2, line 93
716  if (!r_R2())
717  {
718  return false;
719  }
720  // delete, line 93
721  slice_del();
722  break;
723  case 2:
724  // (, line 97
725  // call R2, line 98
726  if (!r_R2())
727  {
728  return false;
729  }
730  // <-, line 98
731  slice_from("log");
732  break;
733  case 3:
734  // (, line 101
735  // call R2, line 102
736  if (!r_R2())
737  {
738  return false;
739  }
740  // <-, line 102
741  slice_from("u");
742  break;
743  case 4:
744  // (, line 105
745  // call R2, line 106
746  if (!r_R2())
747  {
748  return false;
749  }
750  // <-, line 106
751  slice_from("ente");
752  break;
753  case 5:
754  // (, line 109
755  // call R1, line 110
756  if (!r_R1())
757  {
758  return false;
759  }
760  // delete, line 110
761  slice_del();
762  // try, line 111
763  v_1 = limit - cursor;
764  do
765  {
766  // (, line 111
767  // [, line 112
768  ket = cursor;
769  // substring, line 112
770  among_var = find_among_b(a_2, 4);
771  if (among_var == 0)
772  {
773  cursor = limit - v_1;
774  break;
775  }
776  // ], line 112
777  bra = cursor;
778  // call R2, line 112
779  if (!r_R2())
780  {
781  cursor = limit - v_1;
782  break;
783  }
784  // delete, line 112
785  slice_del();
786  switch (among_var)
787  {
788  case 0:
789  cursor = limit - v_1;
790  subroot = true;
791  break;
792  case 1:
793  // (, line 113
794  // [, line 113
795  ket = cursor;
796  // literal, line 113
797  if (!(eq_s_b(2, "at")))
798  {
799  cursor = limit - v_1;
800  subroot = true;
801  break;
802  }
803  // ], line 113
804  bra = cursor;
805  // call R2, line 113
806  if (!r_R2())
807  {
808  cursor = limit - v_1;
809  subroot = true;
810  break;
811  }
812  // delete, line 113
813  slice_del();
814  break;
815  }
816  if (subroot) { subroot = false; break; }
817  } while (false);
818  break;
819  case 6:
820  // (, line 121
821  // call R2, line 122
822  if (!r_R2())
823  {
824  return false;
825  }
826  // delete, line 122
827  slice_del();
828  // try, line 123
829  v_2 = limit - cursor;
830  do
831  {
832  // (, line 123
833  // [, line 124
834  ket = cursor;
835  // substring, line 124
836  among_var = find_among_b(a_3, 3);
837  if (among_var == 0)
838  {
839  cursor = limit - v_2;
840  break;
841  }
842  // ], line 124
843  bra = cursor;
844  switch (among_var)
845  {
846  case 0:
847  cursor = limit - v_2;
848  subroot = true;
849  break;
850  case 1:
851  // (, line 127
852  // call R2, line 127
853  if (!r_R2())
854  {
855  cursor = limit - v_2;
856  subroot = true;
857  break;
858  }
859  // delete, line 127
860  slice_del();
861  break;
862  }
863  if (subroot) { subroot = false; break; }
864  } while (false);
865  break;
866  case 7:
867  // (, line 133
868  // call R2, line 134
869  if (!r_R2())
870  {
871  return false;
872  }
873  // delete, line 134
874  slice_del();
875  // try, line 135
876  v_3 = limit - cursor;
877  do
878  {
879  // (, line 135
880  // [, line 136
881  ket = cursor;
882  // substring, line 136
883  among_var = find_among_b(a_4, 3);
884  if (among_var == 0)
885  {
886  cursor = limit - v_3;
887  break;
888  }
889  // ], line 136
890  bra = cursor;
891  switch (among_var)
892  {
893  case 0:
894  cursor = limit - v_3;
895  subroot = true;
896  break;
897  case 1:
898  // (, line 139
899  // call R2, line 139
900  if (!r_R2())
901  {
902  cursor = limit - v_3;
903  subroot = true;
904  break;
905  }
906  // delete, line 139
907  slice_del();
908  break;
909  }
910  if (subroot) { subroot = false; break; }
911  } while (false);
912  break;
913  case 8:
914  // (, line 145
915  // call R2, line 146
916  if (!r_R2())
917  {
918  return false;
919  }
920  // delete, line 146
921  slice_del();
922  // try, line 147
923  v_4 = limit - cursor;
924  do
925  {
926  // (, line 147
927  // [, line 148
928  ket = cursor;
929  // literal, line 148
930  if (!(eq_s_b(2, "at")))
931  {
932  cursor = limit - v_4;
933  break;
934  }
935  // ], line 148
936  bra = cursor;
937  // call R2, line 148
938  if (!r_R2())
939  {
940  cursor = limit - v_4;
941  break;
942  }
943  // delete, line 148
944  slice_del();
945  } while (false);
946  break;
947  case 9:
948  // (, line 152
949  // call RV, line 153
950  if (!r_RV())
951  {
952  return false;
953  }
954  // literal, line 153
955  if (!(eq_s_b(1, "e")))
956  {
957  return false;
958  }
959  // <-, line 154
960  slice_from("ir");
961  break;
962  }
963  return true;
964  }
965 
966 
967  private bool r_verb_suffix()
968  {
969  int among_var;
970  int v_1;
971  int v_2;
972  // setlimit, line 159
973  v_1 = limit - cursor;
974  // tomark, line 159
975  if (cursor < I_pV)
976  {
977  return false;
978  }
979  cursor = I_pV;
980  v_2 = limit_backward;
981  limit_backward = cursor;
982  cursor = limit - v_1;
983  // (, line 159
984  // [, line 160
985  ket = cursor;
986  // substring, line 160
987  among_var = find_among_b(a_6, 120);
988  if (among_var == 0)
989  {
990  limit_backward = v_2;
991  return false;
992  }
993  // ], line 160
994  bra = cursor;
995  switch (among_var)
996  {
997  case 0:
998  limit_backward = v_2;
999  return false;
1000  case 1:
1001  // (, line 179
1002  // delete, line 179
1003  slice_del();
1004  break;
1005  }
1006  limit_backward = v_2;
1007  return true;
1008  }
1009 
1010 
1011  private bool r_residual_suffix()
1012  {
1013  int among_var;
1014  // (, line 183
1015  // [, line 184
1016  ket = cursor;
1017  // substring, line 184
1018  among_var = find_among_b(a_7, 7);
1019  if (among_var == 0)
1020  {
1021  return false;
1022  }
1023  // ], line 184
1024  bra = cursor;
1025  switch (among_var)
1026  {
1027  case 0:
1028  return false;
1029  case 1:
1030  // (, line 187
1031  // call RV, line 187
1032  if (!r_RV())
1033  {
1034  return false;
1035  }
1036  // delete, line 187
1037  slice_del();
1038  break;
1039  }
1040  return true;
1041  }
1042 
1043 
1044  private bool r_residual_form()
1045  {
1046  bool subroot = false;
1047  int among_var;
1048  int v_1;
1049  int v_2;
1050  int v_3;
1051  // (, line 191
1052  // [, line 192
1053  ket = cursor;
1054  // substring, line 192
1055  among_var = find_among_b(a_8, 4);
1056  if (among_var == 0)
1057  {
1058  return false;
1059  }
1060  // ], line 192
1061  bra = cursor;
1062  switch (among_var)
1063  {
1064  case 0:
1065  return false;
1066  case 1:
1067  // (, line 194
1068  // call RV, line 194
1069  if (!r_RV())
1070  {
1071  return false;
1072  }
1073  // delete, line 194
1074  slice_del();
1075  // [, line 194
1076  ket = cursor;
1077  // or, line 194
1078  do
1079  {
1080  v_1 = limit - cursor;
1081  do
1082  {
1083  // (, line 194
1084  // literal, line 194
1085  if (!(eq_s_b(1, "u")))
1086  {
1087  break;
1088  }
1089  // ], line 194
1090  bra = cursor;
1091  // test, line 194
1092  v_2 = limit - cursor;
1093  // literal, line 194
1094  if (!(eq_s_b(1, "g")))
1095  {
1096  break;
1097  }
1098  cursor = limit - v_2;
1099  subroot = true;
1100  if (subroot) break;
1101  } while (false);
1102  if (subroot) { subroot = false; break; }
1103  cursor = limit - v_1;
1104  // (, line 195
1105  // literal, line 195
1106  if (!(eq_s_b(1, "i")))
1107  {
1108  return false;
1109  }
1110  // ], line 195
1111  bra = cursor;
1112  // test, line 195
1113  v_3 = limit - cursor;
1114  // literal, line 195
1115  if (!(eq_s_b(1, "c")))
1116  {
1117  return false;
1118  }
1119  cursor = limit - v_3;
1120  } while (false);
1121  // call RV, line 195
1122  if (!r_RV())
1123  {
1124  return false;
1125  }
1126  // delete, line 195
1127  slice_del();
1128  break;
1129  case 2:
1130  // (, line 196
1131  // <-, line 196
1132  slice_from("c");
1133  break;
1134  }
1135  return true;
1136  }
1137 
1138 
1139  private bool CanStem()
1140  {
1141  bool subroot = false;
1142  int v_1;
1143  int v_2;
1144  int v_3;
1145  int v_4;
1146  int v_5;
1147  int v_6;
1148  int v_7;
1149  int v_8;
1150  int v_9;
1151  int v_10;
1152  // (, line 201
1153  // do, line 202
1154  v_1 = cursor;
1155  do
1156  {
1157  // call prelude, line 202
1158  if (!r_prelude())
1159  {
1160  break;
1161  }
1162  } while (false);
1163  cursor = v_1;
1164  // do, line 203
1165  v_2 = cursor;
1166  do
1167  {
1168  // call mark_regions, line 203
1169  if (!r_mark_regions())
1170  {
1171  break;
1172  }
1173  } while (false);
1174  cursor = v_2;
1175  // backwards, line 204
1176  limit_backward = cursor; cursor = limit;
1177  // (, line 204
1178  // do, line 205
1179  v_3 = limit - cursor;
1180  do
1181  {
1182  // (, line 205
1183  // or, line 209
1184  do
1185  {
1186  v_4 = limit - cursor;
1187  do
1188  {
1189  // (, line 206
1190  // and, line 207
1191  v_5 = limit - cursor;
1192  // (, line 206
1193  // or, line 206
1194  do
1195  {
1196  v_6 = limit - cursor;
1197  do
1198  {
1199  // call standard_suffix, line 206
1200  if (!r_standard_suffix())
1201  {
1202  break;
1203  }
1204  subroot = true;
1205  if (subroot) break;
1206  } while (false);
1207  if (subroot) { subroot = false; break; }
1208  cursor = limit - v_6;
1209  // call verb_suffix, line 206
1210  if (!r_verb_suffix())
1211  {
1212  subroot = true;
1213  break;
1214  }
1215  } while (false);
1216  if (subroot) { subroot = false; break; }
1217  cursor = limit - v_5;
1218  // do, line 207
1219  v_7 = limit - cursor;
1220  do
1221  {
1222  // (, line 207
1223  // [, line 207
1224  ket = cursor;
1225  // literal, line 207
1226  if (!(eq_s_b(1, "i")))
1227  {
1228  break;
1229  }
1230  // ], line 207
1231  bra = cursor;
1232  // test, line 207
1233  v_8 = limit - cursor;
1234  // literal, line 207
1235  if (!(eq_s_b(1, "c")))
1236  {
1237  break;
1238  }
1239  cursor = limit - v_8;
1240  // call RV, line 207
1241  if (!r_RV())
1242  {
1243  break;
1244  }
1245  // delete, line 207
1246  slice_del();
1247  } while (false);
1248  cursor = limit - v_7;
1249  subroot = true;
1250  if (subroot) break;
1251  } while (false);
1252  if (subroot) { subroot = false; break; }
1253  cursor = limit - v_4;
1254  // call residual_suffix, line 209
1255  if (!r_residual_suffix())
1256  {
1257  subroot = true;
1258  break;
1259  }
1260  } while (false);
1261  if (subroot) { subroot = false; break; }
1262  } while (false);
1263  cursor = limit - v_3;
1264  // do, line 211
1265  v_9 = limit - cursor;
1266  do
1267  {
1268  // call residual_form, line 211
1269  if (!r_residual_form())
1270  {
1271  break;
1272  }
1273  } while (false);
1274  cursor = limit - v_9;
1275  cursor = limit_backward; // do, line 213
1276  v_10 = cursor;
1277  do
1278  {
1279  // call postlude, line 213
1280  if (!r_postlude())
1281  {
1282  break;
1283  }
1284  } while (false);
1285  cursor = v_10;
1286  return true;
1287  }
1288 
1294  public string Stem(string s)
1295  {
1296  this.setCurrent(s.ToLowerInvariant());
1297  this.CanStem();
1298  return this.getCurrent();
1299  }
1300 
1301  }
1302 
1303 }