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

Stemmer Bundle Laravel Package

dompat/stemmer-bundle

View on GitHub
Deep Wiki
Context7

Stemmer Bundle for Symfony

Latest Version on Packagist Software License PHP Version Symfony Version

This bundle integrates the dompat/stemmer library into Symfony. It provides automatic service registration, Twig filters and easy configuration for language drivers.

✨ Features

  • Automatic Driver Registration: Registers all drivers provided by dompat/drivers.
  • Twig Support: Simple |stem filter for your templates.
  • Configurable Contexts: Map custom locales to specific drivers via YAML.
  • Autoconfiguration: Just implement DriverInterface to add your own drivers.
  • Driver Priority: Easily override core drivers with your own implementation.

🚀 Installation

Install the bundle via Composer:

composer require dompat/stemmer-bundle

Enable the bundle in config/bundles.php:

return [
    // ...
    Dompat\StemmerBundle\DompatStemmerBundle::class => ['all' => true],
];

📖 Usage

Using the Service

You can inject Dompat\Stemmer\Stemmer into your services or controllers:

use Dompat\Stemmer\Stemmer;
use Dompat\Stemmer\Enum\StemmerMode;

public function search(string $query, Stemmer $stemmer)
{
    $stemmed = $stemmer->stem($query, 'cs', StemmerMode::AGGRESSIVE);
    // ...
}

Using Twig

The bundle provides a stem filter:

{# Simple usage (uses LIGHT mode by default) #}
{{ 'working'|stem('en') }} {# output: work #}

{# With explicit mode #}
{{ 'declaration'|stem('en', 'aggressive') }} {# output: declar #}

Available modes: light (default), aggressive.

⚙️ Configuration

By default, the bundle registers all drivers found in dompat/stemmer. You can add custom mapping or override default drivers in config/packages/dompat_stemmer.yaml:

dompat_stemmer:
    contexts:
        sk: Dompat\Stemmer\Driver\CzechDriver  # Use Czech rules for Slovak language
        en: App\Stemmer\MyCustomEnglishDriver  # Force your custom driver for English

🌍 Adding Custom Drivers

To add a new language driver, implement Dompat\Stemmer\Contract\DriverInterface.

Autowiring and Priority

If you use autoconfiguration (default in Symfony), your driver will be automatically registered with the Stemmer manager.

Custom drivers have a higher priority by default. This means if you create your own EnglishDriver, it will automatically replace the original one from the library without any extra configuration.

If you want to use a specific driver for a locale (e.g., to switch back to the original one or map a different class), use the contexts configuration shown above.

namespace App\Stemmer;

use Dompat\Stemmer\Contract\DriverInterface;
use Dompat\Stemmer\Contract\StemmerModeInterface;

class FrenchDriver implements DriverInterface
{
    public function getLocale(): string
    {
        return 'fr';
    }

    public function stem(string $word, StemmerModeInterface $mode): string
    {
        // ... your implementation
    }

    public function __toString(): string
    {
        return 'FrenchDriver';
    }
}

📄 License

This bundle is licensed under the MIT License.

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.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle