dompat/stemmer-bundle

Symfony integration for the PHP Stemmer. Includes Twig filters, automatic driver registration and YAML configuration.

Maintainers

Package info

github.com/domPatera/stemmer-bundle

Type:symfony-bundle

pkg:composer/dompat/stemmer-bundle

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.0.0 2026-02-26 17:38 UTC

This package is auto-updated.

Last update: 2026-04-26 17:59:43 UTC


README

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.