wamania/php-stemmer
PHP library for stemming words in multiple languages (Snowball-based). Reduce words to their root form for search, indexing, and text analysis. Lightweight and easy to integrate into PHP apps, with ready-to-use stemmers for common languages.
Install via Composer:
composer require wamania/php-stemmer
Begin by stemming a single word—ideal for quick validation or unit testing:
use Wamania\PHPStemmer\Stemmer;
$stemmer = new Stemmer();
$stemmer->setLanguage('en'); // or 'fr', 'es', 'it', 'pt', 'nl', 'de', 'ru', etc.
echo $stemmer->stem('running'); // outputs: 'run'
For Laravel, bind a shared instance in a service provider or use a helper:
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton(Stemmer::class, fn () => (new Stemmer())->setLanguage(config('app.locale')));
}
function stemTokens(array $tokens, Stemmer $stemmer): array
{
return array_unique(array_map([$stemmer, 'stem'], $tokens));
}
Accept-Language headers or profile settings to route to the correct stemmer instance—avoid hardcoding setLanguage() globally.Stemmer::getSupportedLanguages() before assuming availability.university → univers, universe → univers. Don’t use for semantic equivalence tasks like synonym expansion.Stemmer instances inside loops.Wamania\PHPStemmer\StemmerInterface if you need custom algorithms (e.g., Porter2).debug_backtrace() or logging to trace stemming mismatches—especially when search results drop unexpectedly after normalization. Compare stemmed vs. raw term frequencies in logs.How can I help you explore Laravel packages today?