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

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

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

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

Функционал:

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

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

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

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

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

Эта интерпретация доступна в константе 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) "лисошенький"

  и т д