Lightweight as a stemmer.
Accurate as a lemmatizer.

LemmaJet is a compiler for stemmers and lemmatizers. Heavy NLP (morphological lexicons, neural taggers) runs once, offline, over your corpus. What you ship is a tiny, deterministic function that maps every word to its stem or lemma, so running, ran and runs become one search term, including the irregular and alternating forms that rule-based stemmers get wrong.

Use it as a faster, more accurate replacement for Snowball in BM25 and full-text search, in the sparse half of hybrid RAG retrieval, or anywhere a spaCy or Stanza lemmatizer is too heavy or slow: in the browser, at the edge, or on your server. Models are emitted as dependency-free JavaScript/TypeScript or Python, with identical output on every target. Like Snowball, it works on single words rather than whole sentences.

Coming soon. The LemmaJet npm and pip packages are not published yet, and the compiler itself will follow shortly after, so you will be able to build models for your own corpus and language. Until then, the live demo runs real compiled models in your browser. The GitHub repository is currently a placeholder.

Measured on our own dual-domain corpora (general text and public-domain scripture), md-balanced profile. See the benchmarks page for details; independent microbenchmarks are coming.

Learn more

Stemmer-sized

Models are a reversed suffix trie with a handful of exceptions: from about 1.5 KB gzipped for a compact English model to a few dozen KB for the high-accuracy tiers.

Lemmatizer-grade

Handles irregular and alternating forms that rule-based stemmers miss, because the model is distilled from a heavy morphological teacher, not hand-written rules.

Stem or lemma

Emit stable stems for search indexing, or true dictionary headwords with lemma mode.

Runs anywhere

Pure JavaScript/TypeScript and Python output, plus Snowball .sbl for every other language Snowball can target.

Tuned to your domain

Compile from your own corpus and pick a size/accuracy profile (xxs to xl).

Extensible

New languages and new output languages plug in behind small, documented interfaces.