Stemmers
Stemmers reduce related word forms to a shared root. Improves recall; can reduce precision.
English stemmers
| Type | Behaviour | Notes |
|---|---|---|
EnglishStemmer |
Porter-based | Default for English. AnalyserFactory.Create("en") uses it |
LightEnglishStemmer |
Lighter suffix stripping | Less aggressive than Porter |
KStemmer |
Lexicon-validated (Krovetz-inspired) | Needs KStemLexicon.FromFile |
HunspellStemmer |
Hunspell dictionary-based | Needs .aff/.dic files. Handles irregular forms |
StemmedAnalyser also applies Porter stemming via PorterStemmerFilter.
Hunspell stemming
using Rowles.LeanCorpus.Analysis.Stemmers;
var dict = HunspellDictionary.FromFiles(new MMapDirectory("/dictionaries/en_US"));
var stemmer = new HunspellStemmer(dict);
var analyser = new StemmerAnalyser(
tokeniser: new Tokeniser(),
stemmer: stemmer);
Other languages
ArabicStemmer, ChineseStemmer, DutchStemmer, FrenchStemmer, GermanStemmer, ItalianStemmer, JapaneseStemmer, KoreanStemmer, PortugueseStemmer, RussianStemmer, SpanishStemmer.
Use with LanguageAnalyser or a custom pipeline.
Choosing
EnglishStemmerfor ordinary English search.LightEnglishStemmerwhen Porter is too aggressive.KStemmerwhen false stems are worse than missed stems.LanguageAnalyserfor packaged stop words + stemming for a supported language.- Skip stemming when exact forms matter more than recall.
Example
var analyser = new LanguageAnalyser(
tokeniser: new Tokeniser(),
stopWords: StopWords.English,
stemmer: new EnglishStemmer());
See also
- Analysis overview
- Analysers
- <xref:Rowles.LeanCorpus.Analysis.Stemmers.IStemmer>