dompat/stemmer
Strictly typed PHP 8.3+ stemming library for better full-text search, indexing, and text analysis. Supports LIGHT and AGGRESSIVE modes, with extensible language drivers. Includes Czech and English out of the box; add custom locales easily.
A strictly-typed stemming library for PHP 8.3+. This library helps reduce words to their base form, which is essential for quality full-text search, indexing, or text analysis.
LIGHT: Removes only basic suffixes (plurals, cases). Ideal for result highlighting (words remain readable).AGGRESSIVE: Reduces words to their morphological root. Ideal for search indexes.You can install the library via Composer:
composer require dompat/stemmer
use Dompat\Stemmer\Stemmer;
use Dompat\Stemmer\Driver\CzechDriver;
use Dompat\Stemmer\Driver\EnglishDriver;
use Dompat\Stemmer\Enum\StemmerMode;
// 1. Using the main Stemmer manager
$stemmer = new Stemmer([
new CzechDriver('cs'),
new EnglishDriver('en'),
]);
echo $stemmer->stem('městě', 'cs'); // "město"
echo $stemmer->stem('working', 'en'); // "work"
// 2. Using drivers directly (optional)
$czechDriver = new CzechDriver('cs');
echo $czechDriver->stem('nejkrásnějšímu', StemmerMode::AGGRESSIVE); // "krásn"
// 3. Custom locale for specific needs (e.g., Slovak)
$skDriver = new CzechDriver('sk');
echo $skDriver->stem('meste', StemmerMode::LIGHT); // "mesto"
use Dompat\Stemmer\Stemmer;
use Your\Custom\CustomDriver;
$stemmer = new Stemmer();
$stemmer->addDriver(new CustomDriver('xy'));
echo $stemmer->stem('word', 'xy');
| Language | Code | Driver |
|---|---|---|
| Czech | cs |
CzechDriver |
| English | en |
EnglishDriver |
Missing a language? Feel free to create your own driver by implementing
DriverInterfaceand submit a Pull Request!
Suitable for autocomplete and word highlighting in text. Removes only the most necessary suffixes so the word remains understandable to the user.
Suitable for search indexing. Reduces the word to its core, increasing search relevance across different word forms.
| Word (EN) | Light Mode | Aggressive Mode |
|---|---|---|
declaration |
declaration |
declar |
happiness |
happiness |
happi |
happy |
happi |
happi |
working |
work |
work |
| Word (CS) | Light Mode | Aggressive Mode |
|---|---|---|
nejkrásnějšímu |
krásnějš |
krás |
čínští |
čínsk |
číns |
babizna |
babizn |
bab |
městě |
měst |
měst |
If you want to contribute to the library, you can run tests and static analysis:
# Run tests
vendor/bin/phpunit tests
# Static analysis (PHPStan)
vendor/bin/phpstan analyse
This library is licensed under the MIT License.
How can I help you explore Laravel packages today?