in src/Lucene.Net.Analysis.Common/Analysis/Fr/FrenchLightStemmer.cs [68:276]
public virtual int Stem(char[] s, int len)
{
if (len > 5 && s[len - 1] == 'x')
{
if (s[len - 3] == 'a' && s[len - 2] == 'u' && s[len - 4] != 'e')
{
s[len - 2] = 'l';
}
len--;
}
if (len > 3 && s[len - 1] == 'x')
{
len--;
}
if (len > 3 && s[len - 1] == 's')
{
len--;
}
if (len > 9 && StemmerUtil.EndsWith(s, len, "issement"))
{
len -= 6;
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 8 && StemmerUtil.EndsWith(s, len, "issant"))
{
len -= 4;
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 6 && StemmerUtil.EndsWith(s, len, "ement"))
{
len -= 4;
if (len > 3 && StemmerUtil.EndsWith(s, len, "ive"))
{
len--;
s[len - 1] = 'f';
}
return Norm(s, len);
}
if (len > 11 && StemmerUtil.EndsWith(s, len, "ficatrice"))
{
len -= 5;
s[len - 2] = 'e';
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 10 && StemmerUtil.EndsWith(s, len, "ficateur"))
{
len -= 4;
s[len - 2] = 'e';
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 9 && StemmerUtil.EndsWith(s, len, "catrice"))
{
len -= 3;
s[len - 4] = 'q';
s[len - 3] = 'u';
s[len - 2] = 'e';
//s[len-1] = 'r' <-- unnecessary, already 'r'.
return Norm(s, len);
}
if (len > 8 && StemmerUtil.EndsWith(s, len, "cateur"))
{
len -= 2;
s[len - 4] = 'q';
s[len - 3] = 'u';
s[len - 2] = 'e';
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 8 && StemmerUtil.EndsWith(s, len, "atrice"))
{
len -= 4;
s[len - 2] = 'e';
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 7 && StemmerUtil.EndsWith(s, len, "ateur"))
{
len -= 3;
s[len - 2] = 'e';
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 6 && StemmerUtil.EndsWith(s, len, "trice"))
{
len--;
s[len - 3] = 'e';
s[len - 2] = 'u';
s[len - 1] = 'r';
}
if (len > 5 && StemmerUtil.EndsWith(s, len, "ième"))
{
return Norm(s, len - 4);
}
if (len > 7 && StemmerUtil.EndsWith(s, len, "teuse"))
{
len -= 2;
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 6 && StemmerUtil.EndsWith(s, len, "teur"))
{
len--;
s[len - 1] = 'r';
return Norm(s, len);
}
if (len > 5 && StemmerUtil.EndsWith(s, len, "euse"))
{
return Norm(s, len - 2);
}
if (len > 8 && StemmerUtil.EndsWith(s, len, "ère"))
{
len--;
s[len - 2] = 'e';
return Norm(s, len);
}
if (len > 7 && StemmerUtil.EndsWith(s, len, "ive"))
{
len--;
s[len - 1] = 'f';
return Norm(s, len);
}
if (len > 4 && (StemmerUtil.EndsWith(s, len, "folle") || StemmerUtil.EndsWith(s, len, "molle")))
{
len -= 2;
s[len - 1] = 'u';
return Norm(s, len);
}
if (len > 9 && StemmerUtil.EndsWith(s, len, "nnelle"))
{
return Norm(s, len - 5);
}
if (len > 9 && StemmerUtil.EndsWith(s, len, "nnel"))
{
return Norm(s, len - 3);
}
if (len > 4 && StemmerUtil.EndsWith(s, len, "ète"))
{
len--;
s[len - 2] = 'e';
}
if (len > 8 && StemmerUtil.EndsWith(s, len, "ique"))
{
len -= 4;
}
if (len > 8 && StemmerUtil.EndsWith(s, len, "esse"))
{
return Norm(s, len - 3);
}
if (len > 7 && StemmerUtil.EndsWith(s, len, "inage"))
{
return Norm(s, len - 3);
}
if (len > 9 && StemmerUtil.EndsWith(s, len, "isation"))
{
len -= 7;
if (len > 5 && StemmerUtil.EndsWith(s, len, "ual"))
{
s[len - 2] = 'e';
}
return Norm(s, len);
}
if (len > 9 && StemmerUtil.EndsWith(s, len, "isateur"))
{
return Norm(s, len - 7);
}
if (len > 8 && StemmerUtil.EndsWith(s, len, "ation"))
{
return Norm(s, len - 5);
}
if (len > 8 && StemmerUtil.EndsWith(s, len, "ition"))
{
return Norm(s, len - 5);
}
return Norm(s, len);
}