cloudcastle / dictionary
Production-ready PHP 8.1+ package (CloudCastle Dictionary).
Requires
- php: >=8.1
Requires (Dev)
- deptrac/deptrac: ^3.0 || ^4.0
- doctrine/inflector: ^2.1
- ergebnis/composer-normalize: ^2.45
- friendsofphp/php-cs-fixer: ^3.75
- icanboogie/inflector: ^4.0
- icanhazstring/composer-unused: ^0.9
- infection/infection: ^0.29 || ^0.33
- php-parallel-lint/php-parallel-lint: ^1.4
- phpdocumentor/shim: ^3.7
- phpmd/phpmd: ^2.15
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^1.12 || ^2.1
- phpstan/phpstan-deprecation-rules: ^1.2 || ^2.0
- phpstan/phpstan-phpunit: ^1.4 || ^2.0
- phpstan/phpstan-strict-rules: ^1.6 || ^2.0
- phpunit/phpunit: ^10.5 || ^11.5
- psalm/plugin-phpunit: ^0.19 || ^0.20
- rector/rector: ^1.2 || ^2.0
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.12 || ^4.0
- symfony/string: ^6.4
- vimeo/psalm: ^6.0
- wapmorgan/morphos: ^3.2
- webmozart/assert: ^1.11
This package is auto-updated.
Last update: 2026-07-16 16:25:51 UTC
README
Словари словоформ для PHP 8.1+: род, пол, падежи и неправильные глаголы пяти языков (ru/en/de/fr/es) со словарной точностью. Лексическая база склонений cloudcastle/inflector.
Язык документации: Русский · English
Установка
composer require cloudcastle/dictionary
Требуется PHP 8.1+.
Быстрый старт
<?php use CloudCastle\Dictionary\Dictionary; use CloudCastle\Dictionary\WordClass; $nouns = Dictionary::load('ru', WordClass::Noun); // словарная точность каждой формы: 6 падежей × 2 числа $nouns->formOf('человек', 'gen:pl'); // «людей» $nouns->find('людьми')?->lemma; // «человек» — обратный поиск по форме // пол по имени, в том числе по косвенной форме $names = Dictionary::load('ru', WordClass::GivenName); $names->find('Александра')?->gender; // Gender::Feminine $names->find('Петре')?->gender; // Gender::Masculine // неправильные глаголы Dictionary::load('en', WordClass::Verb)->formOf('go', 'past'); // «went» // пользовательский словарь уточняет поставляемый $custom = Dictionary::fromArray(['кофе' => ['g' => 'm']]); $merged = $nouns->merge($custom);
Возможности
- Пять языков — паритет с inflector — русский, английский, немецкий, французский, испанский: словари существительных, глаголов и имён для каждого.
- Словарная точность — точные словоформы вместо эвристик: полная падежная парадигма русских существительных (6 падежей × 2 числа) и немецких (4 × 2, включая умлаут-плюрали и n-склонение), нерегулярное множественное en/fr/es, неправильные глаголы всех пяти языков.
- Род и пол — грамматический род существительных (включая неочевидный: la mano, el día), пол по личному имени для всех пяти языков (включая косвенные формы и имена-унисекс: Саша, Kim, Camille, Guadalupe), одушевлённость.
- Обратный поиск — лемма по любой словоформе за O(1) (ленивый индекс).
formOf()— словоформа за один вызов через плоский индекс: быстрее мемоизации doctrine на горячем пути.- Расширяемость — пользовательские словари
fromArray/fromEntriesиmergeс приоритетом пользовательских записей. - Безопасность — строгая валидация кода языка (без path traversal), файлы данных — чистые return-массивы, дружелюбные к opcache.
- Zero-dependency — только PHP 8.1+.
Пакет — словарная база для склонений cloudcastle/inflector: род, пол, числительные, времена и падежи со словарной точностью каждой формы.
Сравнение с аналогами
Сгенерировано из tools/features-data.php (факты о поддержке). Легенда: ✅ полностью · ⚠️ частично · 🔌 адаптер · ❌ нет · — неприменимо.
Словарная точность
| Функция | Dictionary | morphos | doctrine | icanboogie | symfony | phpmorphy | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Точные словоформы из словаря (не правила) | ✅ | ⚠️ | ❌ | ❌ | ❌ | ✅ | Dictionary, phpmorphy |
| Полная падежная парадигма (6×2 форм) | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | Dictionary, morphos, phpmorphy |
| Обратный поиск: лемма по любой словоформе | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | Dictionary, phpmorphy |
| Род существительных и одушевлённость | ✅ | ⚠️ | ❌ | ❌ | ❌ | ✅ | Dictionary, phpmorphy |
Имена и пол
| Функция | Dictionary | morphos | doctrine | icanboogie | symfony | phpmorphy | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Пол по личному имени | ✅ | ✅ | ❌ | ❌ | ❌ | ⚠️ | Dictionary, morphos |
| Пол по косвенной форме имени («Петре») | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Dictionary |
| Имена-унисекс (общий род) | ✅ | ⚠️ | ❌ | ❌ | ❌ | ❌ | Dictionary |
Глаголы
| Функция | Dictionary | morphos | doctrine | icanboogie | symfony | phpmorphy | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Нерегулярные глаголы EN (go → went/gone) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | Dictionary |
| Формы прошедшего по роду RU (шёл/шла/шло) | ✅ | ⚠️ | ❌ | ❌ | ❌ | ✅ | Dictionary, phpmorphy |
| Спряжение по лицам и числам | ✅ | ⚠️ | ❌ | ❌ | ❌ | ✅ | Dictionary, phpmorphy |
Расширяемость и эксплуатация
| Функция | Dictionary | morphos | doctrine | icanboogie | symfony | phpmorphy | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Пользовательские словари и merge с приоритетом | ✅ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | Dictionary |
| Zero-dependency (без расширений и бинарных словарей) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | Паритет лидеров |
| Ленивые загрузка и индексация (opcache-friendly PHP-данные) | ✅ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | Dictionary |
| Актуальный PHP 8.1+ и строгая типизация | ✅ | ⚠️ | ✅ | ✅ | ✅ | ❌ | Dictionary, doctrine, icanboogie, symfony |
Производительность
Сгенерировано из composer compare (PHP 8.1.34). Правки в блоке будут перезаписаны.
| Сценарий | cloudcastle/dictionary | wapmorgan/morphos | doctrine/inflector | icanboogie/inflector | symfony/string | 🏆 Победитель |
|---|---|---|---|---|---|---|
| RU: родительный падеж нерегулярного слова (человек → человека) | 10330798 ops/s | 88216 ops/s | — | — | — | cloudcastle/dictionary |
| RU: нерегулярное множественное (человек → люди) | 10688848 ops/s | 84360 ops/s | — | — | — | cloudcastle/dictionary |
| RU: пол по имени (Александра) | 10406411 ops/s | 825724 ops/s | — | — | — | cloudcastle/dictionary |
| EN: нерегулярное множественное (child → children) | 8718154 ops/s | — | 9965084 ops/s | 264925 ops/s | 1173642 ops/s | doctrine/inflector |
| EN: прошедшее неправильного глагола (go → went) | 10964067 ops/s | — | — | — | — | cloudcastle/dictionary |
| Обратный поиск: лемма по словоформе (людьми → человек) | 8662338 ops/s | — | — | — | — | cloudcastle/dictionary |
Документация
- Wiki — руководство пользователя
- Быстрый старт
- Архитектура
- API-документация
Качество
Пакет придерживается production-стандартов: строгая типизация, полный статический анализ (PHPStan max, Psalm level 1, PHPMD, Deptrac, Rector), покрытие тестами ≥ 98 % на каждый файл и мутационное тестирование (Infection MSI ≥ 98 %). Матрица CI — PHP 8.1–8.5.
composer ci # полный пайплайн качества composer check # быстрые проверки перед коммитом composer test # тесты (unit + integration + security + load)
Контакты
- Email — alex-4-17@yandex.ru
- VK — https://vk.com/leha_zorin
- Telegram — @CloudCastle85
- Телефон — +79872763991
- Сетка — https://set.ki/LdYRz76
Поддержать проект
Реквизиты для поддержки автора — в DONATE.md.
Contributors
Спасибо всем, кто вносит вклад в проект:
Список ведётся по спецификации all-contributors.
Лицензия
MIT © CloudCastle