Skip to content

Feature Lookup

github-actions[bot] edited this page Jul 16, 2026 · 1 revision

🔍 Поиск и словоформы

← Возможности · Главная · Сравнение

find() — по лемме и любой словоформе

find() принимает и начальную форму, и любую словоформу записи. Поиск по лемме — прямое обращение к hash-карте; по прочим формам — через обратный индекс, который строится лениво при первом таком запросе.

use CloudCastle\Dictionary\{Dictionary, WordClass};

$nouns = Dictionary::load('ru', WordClass::Noun);

$nouns->find('человек')?->lemma;   // «человек» — по лемме, O(1)
$nouns->find('людьми')?->lemma;    // «человек» — по форме, O(1) после индексации
$nouns->find('стол');              // null — регулярные слова в словаре не нужны

При омонимии (форма одной записи совпадает с леммой другой — «Александра») приоритет у точного совпадения с леммой; при коллизии форм двух записей выигрывает более ранняя.

formOf() — словоформа за один вызов

Горячий путь без промежуточного объекта: вложенный плоский индекс «слово → карта форм» с shared-ссылками (память не дублируется).

$nouns->formOf('человек', 'gen:pl');   // «людей»
$nouns->formOf('люди', 'ins:pl');      // «людьми» — работает и от формы
$nouns->formOf('человек', 'voc:sg');   // null — такой формы нет

findByLemma() и allForms()

$entry = $nouns->findByLemma('ребёнок');
$entry?->form('nom:pl');    // «дети»
$entry?->hasForm('gen:pl'); // true
$entry?->allForms();        // ['ребёнок', 'ребёнка', …, 'дети', 'детей', …]

Рекомендации

  • Для разовых обращений — find(); в циклах и на горячих путях — formOf().
  • has() — проверка вхождения без работы с записью.
  • Ключи форм — строки схемы языка (какие — здесь).

Clone this wiki locally