in opennlp-tools/src/main/java/opennlp/tools/stemmer/PorterStemmer.java [473:568]
private void step5() {
if (k == k0) {
return; /* for Bug 1 */
}
switch (b[k - 1]) {
case 'a':
if (ends("al")) {
break;
}
return;
case 'c':
if (ends("ance")) {
break;
}
if (ends("ence")) {
break;
}
return;
case 'e':
if (ends("er")) {
break;
}
return;
case 'i':
if (ends("ic")) {
break;
}
return;
case 'l':
if (ends("able")) {
break;
}
if (ends("ible")) {
break;
}
return;
case 'n':
if (ends("ant")) {
break;
}
if (ends("ement")) {
break;
}
if (ends("ment")) {
break;
}
/* element etc. not stripped before the m */
if (ends("ent")) {
break;
}
return;
case 'o':
if (ends("ion") && j >= 0 && (b[j] == 's' || b[j] == 't')) {
break;
}
/* j >= 0 fixes Bug 2 */
if (ends("ou")) {
break;
}
return;
/* takes care of -ous */
case 's':
if (ends("ism")) {
break;
}
return;
case 't':
if (ends("ate")) {
break;
}
if (ends("iti")) {
break;
}
return;
case 'u':
if (ends("ous")) {
break;
}
return;
case 'v':
if (ends("ive")) {
break;
}
return;
case 'z':
if (ends("ize")) {
break;
}
return;
default:
return;
}
if (m() > 1) {
k = j;
}
}