How it works
LemmaJet is a compiler: heavy NLP runs once, offline; what ships is a tiny deterministic function.
1. Distill
A teacher pipeline (morphological lexicons, taggers, optional LLM disambiguation for archaic or out-of-vocabulary words) processes a corpus once and produces lemma equivalence classes weighted by corpus statistics.
2. Induce
A reversed suffix trie is built over the vocabulary, with CutAdd(cut, add) operations that capture stem alternations (for example ó↔o in Polish) and a small exception table for suppletive forms.
3. Prune
Bottom-up cost-complexity pruning trades accuracy against model size, so you can choose a profile from xxs to xl.
4. Emit
The model is emitted as a standalone ES module, Python module, TypeScript declarations and Snowball .sbl, with identical output across targets.
Stemming is treated as set partitioning: stems need not be real words, only a stable, collision-free label per lemma family. Lemma mode emits true headwords.