Skip to content
RADIXOR
Dictionary-trained. Not dictionary-bound.

High-quality multilingual stemming.
Built for Java and Python.

Radixor learns word-to-stem transformations from lexical evidence, compiles them into a reduced trie of patch commands, and applies those commands algorithmically at runtime. The training dictionary supplies evidence—it does not define a closed runtime vocabulary.

Choose your runtime
Learned transformationsTrie + compact patch commands
GeneralizesNot restricted to listed word forms
ReproduciblePublic quality and speed evidence
Java benchmark award

Java: wins in all 20
benchmarked languages

In the current same-language Java matrix, Radixor records the lowest measured runtime against every configured comparator on all 20 language pages.

20 / 20Benchmark winsAcross all 20 languages
Reproducible · Transparent · Verifiable

Every result is public, verifiable, and reproducible.

View all benchmarks →

Quality and speed you can trust — Finnish case study

Radixor❄ Snowball Finnish Radixor advantage
Quality score(higher is better)0.9848~0.740+33% higher quality
Overstemming(lower is better)3.03%~52%94.2% lower
Speed(vs. PyStemmer)1.14× faster1.00× (baseline)1.14× faster

Quality comparator: published Snowball Finnish Lucene/Snowball results. Speed comparator: PyStemmer 3.1.0 at batch size N=100. The point is the combined quality/performance envelope, not wrapper identity.

20 languagesFull Unicode support
Java
import org.egothor.stemmer.StemmerPatchTrieLoader;
import org.egothor.stemmer.FrequencyTrie;

FrequencyTrie<CompiledPatchCommand> trie =
    StemmerPatchTrieLoader.loadCompiled(
        StemmerPatchTrieLoader.Language.US_UK, ...);

String word = "running";
CompiledPatchCommand patch = trie.get(word);
String stem = patch == null ? word : patch.apply(word);
View Java docs →
PyPython
from radixor import Stemmer

stemmer = Stemmer("en")
stems = stemmer.stem_batch([
    "running", "studies", "better", "cars"
    ])
View Python docs →

Learned transformationsLexical evidence becomes
compact patch commands

Beyond the dictionaryRuntime is not a closed
word-to-lemma lookup

Native speedMulti-million words per
second in Python and Java

20 language modelsOne architecture, trained
from language-specific data

Production readyDeterministic behavior
and reproducible evidence

A different stemming architecture.

Radixor combines learned patch commands, trie-based structural sharing, subtree reduction, and deterministic runtime application. It is neither a flat dictionary lookup nor another fixed suffix-rule table.

Technology & lineage ▣  Read the Docs