dompat / stemmer-bundle
Symfony integration for the PHP Stemmer. Includes Twig filters, automatic driver registration and YAML configuration.
Package info
github.com/domPatera/stemmer-bundle
Type:symfony-bundle
pkg:composer/dompat/stemmer-bundle
Requires
- php: ^8.3
- dompat/stemmer: ^1.0.2
- symfony/config: ^6.4 || ^7.0 || ^8.0
- symfony/dependency-injection: ^6.4 || ^7.0 || ^8.0
- symfony/http-kernel: ^6.4 || ^7.0 || ^8.0
- symfony/yaml: ^6.4 || ^7.0 || ^8.0
- twig/twig: ^3.0
Requires (Dev)
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^12.0
This package is auto-updated.
Last update: 2026-04-26 17:59:43 UTC
README
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
|stemfilter for your templates. - Configurable Contexts: Map custom locales to specific drivers via YAML.
- Autoconfiguration: Just implement
DriverInterfaceto 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.