Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Php Stemmer Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

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')));
}

Implementation Patterns

  • Search indexing: Stem user queries and indexed document fields before storing or comparing—ideal for lightweight full-text search without external services like Elasticsearch:
function stemTokens(array $tokens, Stemmer $stemmer): array
{
    return array_unique(array_map([$stemmer, 'stem'], $tokens));
}
  • NLP preprocessing pipeline: Integrate into model observers or service classes for cleaning user-generated content (e.g., forum posts, product reviews) prior to analysis or similarity scoring.
  • Laravel Console Tools: Build custom Artisan commands to batch-stem large text exports or audit vocabulary consistency.
  • Language-aware stemmers: Detect user language via Accept-Language headers or profile settings to route to the correct stemmer instance—avoid hardcoding setLanguage() globally.

Gotchas and Tips

  • Language support isn't universal: The library covers ~10 major European/Slavic languages (en, fr, es, it, pt, nl, de, ru) but lacks aggressive support for Chinese, Arabic, or agglutinative languages. Check Stemmer::getSupportedLanguages() before assuming availability.
  • No context awareness: Stemming is purely orthographic—e.g., universityunivers, universeunivers. Don’t use for semantic equivalence tasks like synonym expansion.
  • Performance note: stemmers are stateful. Reuse a single instance per language (not per call) for best performance. Avoid creating new Stemmer instances inside loops.
  • Extend via interfaces: Though minimal, you can swap stemmer backends by implementing Wamania\PHPStemmer\StemmerInterface if you need custom algorithms (e.g., Porter2).
  • Debug tip: Use debug_backtrace() or logging to trace stemming mismatches—especially when search results drop unexpectedly after normalization. Compare stemmed vs. raw term frequencies in logs.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport