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 →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.
Quality and speed you can trust — Finnish case study
Radixor❄ Snowball Finnish Radixor advantageQuality 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.
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.