PHPackages                             zoviet/lexicon - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. zoviet/lexicon

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

zoviet/lexicon
==============

Класс грамматических и смысловых преобразований русских слов и предложений

33PHP

Since Jan 6Pushed 5y ago1 watchersCompare

[ Source](https://github.com/Zoviet/Lexicon)[ Packagist](https://packagist.org/packages/zoviet/lexicon)[ RSS](/packages/zoviet-lexicon/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

================================
================================

[](#)

Lexicon/Semantic: класс грамматических и смысловых преобразований русских слов и предложений
============================================================================================

[](#lexiconsemantic-класс-грамматических-и-смысловых-преобразований-русских-слов-и-предложений)

================================
================================

[](#-1)

Класс использует грамматические правила, а не словари. Исключение: для работы методов преобразования слов из одной части речи в другую используется Yandex.Speller. Класс хорошо подходит для работы с формальными утверждениями, структурными высказываниями, а также со словами, для которых не существует словарных синонимов - например, сложными научными терминами.

Функционал:
-----------

[](#функционал)

1. Выделение в тексте частей речи
2. Удаление окончаний у слов по двум алгоритмам (Мартина Поттера и по словарю окончаний)
3. Преобразование текста в массив слов
4. Очистка текста от незначимых частей речи
5. Поиск в тексте объекта, подлежащего и определения
6. Образование словоформ от стэмов слов
7. Преобразование прилагательных, являющимися определениями в тексте, в существительные
8. Преобразование существительных, являющихся субъектами в тексте, в прилагательные
9. Преобразование слов из одной части речи в другую
10. Добавление оконечных суффиксов к стэмам
11. Образование возможных суффиксальных словоформ от слова

Установка
---------

[](#установка)

```
composer require zoviet/lexicon
```

Использование
-------------

[](#использование)

См. examples.php для более подробной информации.

### Возвращаемые указатели типа и их интерпретация

[](#возвращаемые-указатели-типа-и-их-интерпретация)

- 'UNKN' =&gt; 'Не определено',
- 'PRES' =&gt; 'Предлог',
- 'NUMS' =&gt; 'Числительное',
- 'ADVS' =&gt; 'Наречие',
- 'NOUNS' =&gt; 'Существительное',
- 'VERBS' =&gt; 'Глагол',
- 'PARTS' =&gt; 'Причастие',
- 'ADJS' =&gt; 'Прилагательное',
- 'UNIS' =&gt; 'Союзы'

Эта интерпретация доступна в константе TYPES;

### Статические методы (для обработки слов)

[](#статические-методы-для-обработки-слов)

- test\_word($word,FALSE|TRUE) - Определение части речи слова, вторым параметром передается необходимость интерпретации в текстовом виде (по умолчанию FALSE).

```
echo \Lexicon\Semantic::test_word('курица');

//Вернет: NOUNS

echo \Lexicon\Semantic::test_word('курица',TRUE);

//Вернет: Существительное
```

- remove\_ending($word,$type=FALSE) - Избавление слова от окончаний по словарю окончаний, второй параметр - указатель на то, как интерпретировать слово (например, 'PARTS' - причастие. Не обязательно)

```
echo \Lexicon\Semantic::remove_ending('курица');

//Вернет: куриц

echo \Lexicon\Semantic::remove_ending('курица','ADVS');

//Вернет: курица
```

- stem($word) - Стемминг слова по алгоритму Мартина Портера.

```
echo \Lexicon\Semantic::stem('гиперборейский');

//Вернет: гиперборейск
```

- transform($word,$type,FALSE) - Трансформация слова в другой тип (из существительного в прилагательное и обратно), указатель на который передается вторым параметром, третьим параметром передается необходимость получения массива вариантов, а не единственного с наибольшей доверительной вероятностью. Метод использует Speller.

```
echo \Lexicon\Semantic::transform('ботаник','ADJS');

//Вернет: ботанический

echo \Lexicon\Semantic::transform('некоторый','ADJS');

//Вернет FALSE, т.к. некоторый - не существительное

echo \Lexicon\Semantic::transform('аалдрораловавыаффвыпрафп','ADJS');

//Вернет NULL, т.к. преобразование не получилось
```

- remove\_suffix($word,$type) - Рекурсивно убирает все суффиксы слова тип type (например, VERBS - глагол). Может принимать слова, уже лишенные окончаний.

```
echo \Lexicon\Semantic::remove_suffix('патологоанатомический','ADJS');

//Вернет: патологоанат
```

- add\_suffix($stem,$type,FALSE) - Добавляет суффиксы типа type к стэмму (слову без суффиксов) с проверкой получившегося словаря вариантов. При третьем параметре, установленном в TRUE вернет не один вариант с наибольшей доверительной вероятностью, а словарь с ключами в виде доверительности. Использует Speller.

```
echo \Lexicon\Semantic::add_suffix('ботан','ADJS');

//Вернет: ботанический

\Lexicon\Semantic::add_suffix('лис','ADJS');

//Вернет: ["лисянский"]=>
  int(5)
  ["лысенький"]=>
  int(3)
  ["лисицкий"]=>
  int(3)
  ["лысоватый"]=>
  int(3)
  ["лисовский"]=>
  int(2)
  ["листоватый"]=>
  int(2)
  ["лесистый"]=>
  int(2)
  ["лосский"]=>
  int(2)
```

- forms ($stem,$type) - получение массива всех "грязных" словоформ от стемма по типу type.

```
var_dump (\Lexicon\Semantic::forms('лис','ADJS'));

//Вернет: array(94) {[0]=>
  string(26) "лисоватенький"
  [1]=>
  string(26) "лисоватенькый"
  [2]=>
  string(26) "лисеватенький"
  [3]=>
  string(26) "лисеватенькый"
  [4]=>
  string(22) "лисехонький"
  [5]=>
  string(22) "лисехонькый"
  [6]=>
  string(22) "лисохонький"
  [7]=>
  string(22) "лисохонькый"
  [8]=>
  string(22) "лисешенький"
  [9]=>
  string(22) "лисешенькый"
  [10]=>
  string(22) "лисошенький"

  и т д
```

### Методы обработки текста: фразы, высказывания, предложения

[](#методы-обработки-текста-фразы-высказывания-предложения)

#### Инициализация

[](#инициализация)

```
$semantic = new \Lexicon\Semantic();

//или инициализация с передачей текста:

$semantic = new \Lexicon\Semantic('Программное обеспечение P позволяет рационально организовать распорядок дня и освободить до 70% времени.');
```

#### Сквозные свойства

[](#сквозные-свойства)

- string - содержит исходную фразу со всеми базовыми ее преобразованиями (если они были)
- words - массив слов текста по очереди их появления в нем. Создается либо методом words либо автоматически при вызове любого метода обработки
- result - хранит результаты грамматического разбора текста в виде массива по частям речи с полными словами или (если были применены методы массовой работы с окончаниями) стэммы слов

Если для метода не указано иное, то результатом его работы является изменение сквозных свойств класса.

#### Методы базовой обработки текста

[](#методы-базовой-обработки-текста)

Если для методов не указаны передаваемые свойства, значит их нет.

- text(строка) - передача текста на обработку
- remove\_braces() - удалить из текста скобки вместе с их содержимым
- words(array=NULL) - преобразование строки в массив слов без переданных свойств либо установка в виде массива слов класса переданного массива
- remove\_pres() - удаление из массива слов предлогов
- remove\_unis() - удаление союзов
- remove\_nums() - удаление числительных
- remove\_all() - применение всех вышеперечисленных удалений
- remover($array) - удаление из массива слов и знаков, переданных в виде массива

```
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.';

$semantic->text($string)->remove_braces()->words()->remove_all()->remover(array('%','.'));

var_dump($semantic->words);

//Вернет

array(9) {
  [0]=>
  string(22) "Программное"
  [1]=>
  string(22) "обеспечение"
  [2]=>
  string(18) "позволяет"
  [3]=>
  string(22) "рационально"
  [4]=>
  string(24) "организовать"
  [5]=>
  string(20) "распорядок"
  [6]=>
  string(6) "дня"
  [7]=>
  string(20) "освободить"
  [8]=>
  string(14) "времени"
}
```

#### Разбор текста на части речи

[](#разбор-текста-на-части-речи)

Метод устанавливают свойство result класса.

- explore()

```
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.';

$semantic->text($string)->remove_braces()->words()->remove_all()->explore();

//или если предварительный разбор не нужен, а текст передан через конструктор

$semantic->explore();

var_dump($semantic->result);

//Вернет

 ["ADJS"]=>
  array(2) {
    [0]=>
    string(22) "Программное"
    [1]=>
    string(22) "обеспечение"
  }
  ["VERBS"]=>
  array(3) {
    [0]=>
    string(18) "позволяет"
    [1]=>
    string(24) "организовать"
    [2]=>
    string(20) "освободить"
  }
  ["ADVS"]=>
  array(1) {
    [0]=>
    string(22) "рационально"
  }
  ["NOUNS"]=>
  array(3) {
    [0]=>
    string(20) "распорядок"
    [1]=>
    string(6) "дня"
    [2]=>
    string(14) "времени"
  }
}
```

#### Работа с окончаниями и суффиксами

[](#работа-с-окончаниями-и-суффиксами)

- stemming() - удаление окончаний по словарю. Если метод применить ТО разбора текста на части речи, то окончания будут убраны в массиве слов (words), если после, то в массиве частей речи (results).

```
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.';

$semantic->text($string)->remove_braces()->words()->remove_all()->explore()->stemming();

var_dump($semantic->result);

//Вернет:

 ["ADJS"]=>
  array(2) {
    [0]=>
    string(18) "программн"
    [1]=>
    string(18) "обеспечен"
  }
  ["VERBS"]=>
  array(3) {
    [0]=>
    string(14) "позволя"
    [1]=>
    string(20) "организова"
    [2]=>
    string(14) "освобод"
  }
  ["ADVS"]=>
  array(1) {
    [0]=>
    string(14) "рациона"
  }
  ["NOUNS"]=>
  array(3) {
    [0]=>
    string(16) "распоряд"
    [1]=>
    string(4) "дн"
    [2]=>
    string(12) "времен"
  }
}

$semantic->text($string)->stemming();

var_dump($semantic->words);

//Вернет:

 [0]=>
  string(18) "программн"
  [1]=>
  string(18) "обеспечен"
  [2]=>
  string(14) "позволя"
  [3]=>
  string(14) "рациона"
  [4]=>
  string(20) "организова"
  [5]=>
  string(16) "распоряд"
  [6]=>
  string(4) "дн"
  [7]=>
  string(14) "освобод"
  [8]=>
  string(12) "времен"
}
```

#### Выделение субъектов, предиктов и определений

[](#выделение-субъектов-предиктов-и-определений)

Методы вероятностные, выделение не гарантируется. Работают как с массивом слов, так и с массивом стэмов.

- subject() - выделение субъекта - наиболее "значимого" существительного. Возвращает существительное или NULL если не найдно.
- defenition() - то же для прилагательных.
- predict() - то же для предикта.

```
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.';

echo 'Предикт:'. $semantic->text($string)->predict();
echo ' | Субъект:'. $semantic->subject();
echo ' | Отношение:'. $semantic->definition();

//Вернет:

Предикт:позволяет | Субъект:распорядок | Отношение:Программное
```

#### Преобразования между частями речи строки

[](#преобразования-между-частями-речи-строки)

- to\_noun(FALSE) - Преобразует значимое прилагательное (найдет сам) (отношение) в существительное. Возвращает одно значение (наиболее вероятное) при запуске без свойств или массив (словарь) слов при TRUE. Используется Speller;
- to\_adj(false) - то же самое, только в обратную сторону

```
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.';

echo 'Новый субъект:'. $semantic->text($string)->to_noun();
echo ' | Новое отношение:'. $semantic->to_adj();

//Вернет:

Новый субъект:программа | Новое отношение:распорядительный
```

- analise($deep) - Глубокое преобразование на заданную глубину вложения. Подразумевается работа со значительно усложенными утверждениями. Глубина - число рассматриваемых для анализа сущностей (прилагательных и существительных). Возвращает ассоциированный массив уровней раскрытия и соответсвующих им субъектов.

```
$string = 'Программное обеспечение (P) позволяет чуть более рационально организовать распорядок дня и освободить до 70% времени.';

var_dump ($semantic->text($string)->analise(2));

//Вернет:

array(2) {
  ["level"]=>
  array(3) {
    [0]=>
    string(32) "распорядительный"
    [1]=>
    string(10) "новый"
    [2]=>
    string(18) "временный"
  }
  ["subject"]=>
  array(2) {
    [0]=>
    string(16) "программа"
    [1]=>
    string(20) "беспечность"
  }
}
```

Обработка такого массива: отнесения уровня раскрытия к субъекту. Например, в случае из примера выше массив может быть прочтен как "распорядительный программа - новый временный беспечность". После обработки спеллером: "распорядительная программа - новая временная беспечность".

###  Health Score

17

—

LowBetter than 6% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity31

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/b886fe5678889126fb4da37d5d472097b12fe7538f2c6258fc0c64874ee1d450?d=identicon)[Zoviet](/maintainers/Zoviet)

---

Top Contributors

[![Zoviet](https://avatars.githubusercontent.com/u/42181876?v=4)](https://github.com/Zoviet "Zoviet (6 commits)")

### Embed Badge

![Health badge](/badges/zoviet-lexicon/health.svg)

```
[![Health](https://phpackages.com/badges/zoviet-lexicon/health.svg)](https://phpackages.com/packages/zoviet-lexicon)
```

###  Alternatives

[bogdancondorachi/kirby-table-field

Table field plugin for Kirby CMS

5317.7k](/packages/bogdancondorachi-kirby-table-field)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
