Morphos

A morphological solution for Russian and English language written completely in PHP. Provides classes to inflect personal names, geographical names, decline and pluralize nouns, generate cardinal and ordinal numerals, spell out money amounts and time intervals. / Морфологическая библиотека для английского и русского языков. Склоняет имена собственные, названия географических объектов, склонение и плюрализация имен собственных и другое.

View project on GitHub

English

English morphology shortcuts:

  • morphos\English\NounPluralization::pluralize($word, $count)
  • morphos\English\CardinalNumeralGenerator::generate($number)
  • morphos\English\OrdinalNumeralGenerator::generate($number)
  • morphos\English\TimeSpeller::spellInterval(DateInterval $interval)

English class hierarchy:

morphos\
        English\
                CardinalNumeralGenerator
                OrdinalNumeralGenerator
                NounPluralization
                TimeSpeller

Pluralization

Pluralization a word in English is possible with NounPluralization class:

use function morphos\English\pluralize;
use morphos\English\NounPluralization;

echo '10 '.NounPluralization::pluralize('foot') => '10 feet'
// or if you don't know count of objects

// or you can use shortcut
$n = 1;
echo pluralize($n, 'foot') => '1 foot'

Numerals

All number creation classes are similar and have one common methods:

  • string generate($number) - Generates a cardinal numeral for a number.

Cardinal

Creation of cardinal numerals in english language (CardinalNumeralGenerator).

use morphos\English\CardinalNumeralGenerator;

// Get text representation of a number:
$number = 4351;

CardinalNumeralGenerator::generate($number) => 'four thousand, three hundred fifty-one'

Ordinal

Creation of ordinal numerals in english language (OrdinalNumeralGenerator).

use morphos\English\OrdinalNumeralGenerator;

// Get text representation of a number or short form:
$number = 4351;

OrdinalNumeralGenerator::generate($number) => 'four thousand, three hundred fifty-first'
// short form of ordinal numeral
OrdinalNumeralGenerator::generate($number, true) => '4351st'

Time units and intervals

You can generate text representation of time interval with TimeSpeller class:

use morphos\English\TimeSpeller;

// generate text representation of 5 years and 2 months
$interval = new DateInterval('P5Y2M');

TimeSpeller::spellInterval($interval) => '5 years 2 months'
TimeSpeller::spellInterval($interval, TimeSpeller::SEPARATE) => '5 years and 2 months'