61 namespace TraceLab.Components.DevelopmentKit.Preprocessors.Stemmers.Porter
72 private static int INC = 200;
108 void setTerm(
string s)
111 char[] new_b =
new char[i];
112 for (
int c = 0; c < i; c++)
125 return new String(b, 0, i_end);
137 char[] new_b =
new char[i + INC];
138 for (
int c = 0; c < i; c++)
152 public void add(
char[] w,
int wLen)
154 if (i + wLen >= b.Length)
156 char[] new_b =
new char[i + wLen + INC];
157 for (
int c = 0; c < i; c++)
161 for (
int c = 0; c < wLen; c++)
172 return new String(b, 0, i_end);
194 private bool cons(
int i)
202 case 'u':
return false;
203 case 'y':
return (i == 0) ?
true : !cons(i - 1);
204 default:
return true;
225 if (!cons(i))
break; i++;
249 private bool vowelinstem()
252 for (i = 0; i <= j; i++)
259 private bool doublec(
int j)
263 if (b[j] != b[j - 1])
276 private bool cvc(
int i)
278 if (i < 2 || !cons(i) || cons(i - 1) || !cons(i - 2))
281 if (ch ==
'w' || ch ==
'x' || ch ==
'y')
286 private bool ends(String s)
292 char[] sc = s.ToCharArray();
293 for (
int i = 0; i < l; i++)
294 if (b[o + i] != sc[i])
302 private void setto(String s)
306 char[] sc = s.ToCharArray();
307 for (
int i = 0; i < l; i++)
313 private void r(String s)
344 else if (ends(
"ies"))
346 else if (b[k - 1] !=
's')
354 else if ((ends(
"ed") || ends(
"ing")) && vowelinstem())
367 if (ch ==
'l' || ch ==
's' || ch ==
'z')
370 else if (m() == 1 && cvc(k)) setto(
"e");
377 if (ends(
"y") && vowelinstem())
393 if (ends(
"ational")) { r(
"ate");
break; }
394 if (ends(
"tional")) { r(
"tion");
break; }
397 if (ends(
"enci")) { r(
"ence");
break; }
398 if (ends(
"anci")) { r(
"ance");
break; }
401 if (ends(
"izer")) { r(
"ize");
break; }
404 if (ends(
"bli")) { r(
"ble");
break; }
405 if (ends(
"alli")) { r(
"al");
break; }
406 if (ends(
"entli")) { r(
"ent");
break; }
407 if (ends(
"eli")) { r(
"e");
break; }
408 if (ends(
"ousli")) { r(
"ous");
break; }
411 if (ends(
"ization")) { r(
"ize");
break; }
412 if (ends(
"ation")) { r(
"ate");
break; }
413 if (ends(
"ator")) { r(
"ate");
break; }
416 if (ends(
"alism")) { r(
"al");
break; }
417 if (ends(
"iveness")) { r(
"ive");
break; }
418 if (ends(
"fulness")) { r(
"ful");
break; }
419 if (ends(
"ousness")) { r(
"ous");
break; }
422 if (ends(
"aliti")) { r(
"al");
break; }
423 if (ends(
"iviti")) { r(
"ive");
break; }
424 if (ends(
"biliti")) { r(
"ble");
break; }
427 if (ends(
"logi")) { r(
"log");
break; }
440 if (ends(
"icate")) { r(
"ic");
break; }
441 if (ends(
"ative")) { r(
"");
break; }
442 if (ends(
"alize")) { r(
"al");
break; }
445 if (ends(
"iciti")) { r(
"ic");
break; }
448 if (ends(
"ical")) { r(
"ic");
break; }
449 if (ends(
"ful")) { r(
"");
break; }
452 if (ends(
"ness")) { r(
"");
break; }
467 if (ends(
"al"))
break;
return;
469 if (ends(
"ance"))
break;
470 if (ends(
"ence"))
break;
return;
472 if (ends(
"er"))
break;
return;
474 if (ends(
"ic"))
break;
return;
476 if (ends(
"able"))
break;
477 if (ends(
"ible"))
break;
return;
479 if (ends(
"ant"))
break;
480 if (ends(
"ement"))
break;
481 if (ends(
"ment"))
break;
483 if (ends(
"ent"))
break;
return;
485 if (ends(
"ion") && j >= 0 && (b[j] ==
's' || b[j] ==
't'))
break;
487 if (ends(
"ou"))
break;
return;
490 if (ends(
"ism"))
break;
return;
492 if (ends(
"ate"))
break;
493 if (ends(
"iti"))
break;
return;
495 if (ends(
"ous"))
break;
return;
497 if (ends(
"ive"))
break;
return;
499 if (ends(
"ize"))
break;
return;
515 if (a > 1 || a == 1 && !cvc(k - 1))
518 if (b[k] ==
'l' && doublec(k) && m() > 1)