Multilingual Stemmer

Reduce inflected words to Snowball stems in 18 languages. Paste text, choose a language, and get layout-preserving stemmed text, unique stems, form mappings, frequency tables or JSON groups — all locally in your browser.

Try:
Stemmed output

About this tool

Multilingual Stemmer turns inflected words into Snowball stems for search, tagging, keyword normalization and small corpus analysis. A stem is the reduced form used as an index key: running becomes run, Spanish corriendo becomes corr, and German Häusern becomes haus.

Choose the language that matches the text, then choose how you want the result:

Everything runs locally in WebAssembly. No text is uploaded.

Worked example

Input:

The runners were running quickly. Studies studied studying.

With language English and output Stemmed text, the result is:

the runner were run quick. studi studi studi.

For a search index, switch to JSON groups + stats to get counts and surface forms per stem. For an analyst checking a vocabulary cleanup, Form → stem mapping is usually the most readable view.

Languages

The tool uses Snowball stemming algorithms for Arabic, Danish, Dutch, English, Finnish, French, German, Greek, Hungarian, Italian, Norwegian, Portuguese, Romanian, Russian, Spanish, Swedish, Tamil and Turkish.

Limits and edge cases

Also available from the gizza CLI and in chat.

FAQ

Is stemming the same as lemmatization?

No. Stemming strips suffixes according to language rules and returns an index key, not a dictionary word. studies, studied and studying all become studi in English. A lemmatizer would try to return the dictionary lemma study, which usually requires a larger language model or dictionary.

Which language should I choose for mixed-language text?

Choose the dominant language, or split the text first and run each language separately. Snowball algorithms are language-specific: German suffix rules applied to Spanish text, or English rules applied to Turkish text, can produce misleading stems even though the tool will still run.

Why did capitalization change?

By default, words are lowercased before stemming because Snowball algorithms are defined for lowercase input. This makes Running and running collapse to the same stem. Turn off Lowercase before stemming only when case distinctions are part of the token you need to preserve.

What output should I use for search indexing?

Use JSON groups + stats if a downstream program needs counts and source forms, or Unique stems if you only need the vocabulary. Use Stemmed text when you want to feed a normalized text stream into another simple text tool while keeping punctuation and line breaks in place.

Will it handle a full book or a production corpus?

It is intended for pasted snippets, keyword lists and small batches, not full-corpus ETL. The per-run cap is 200,000 characters so the browser and chat WebAssembly sandbox stay responsive. For larger corpora, split the text into chunks or run a dedicated indexing pipeline.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool multilingual-stemmer "The runners were running quickly. Studies studied studying."

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/multilingual-stemmer/?input=The%20runners%20were%20running%20quickly.%20Studies%20studied%20studying.&language=english&output=text&min_length=1&lowercase=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.