{"id":16414627,"url":"https://github.com/wapmorgan/morphos","last_synced_at":"2025-05-14T20:09:09.095Z","repository":{"id":23156071,"uuid":"26511568","full_name":"wapmorgan/Morphos","owner":"wapmorgan","description":"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. / Морфологическая библиотека для английского и русского языков. Склоняет имена собственные, названия географических объектов, склонение и плюрализация имен собственных и другое.","archived":false,"fork":false,"pushed_at":"2025-04-21T20:03:51.000Z","size":815,"stargazers_count":812,"open_issues_count":19,"forks_count":111,"subscribers_count":39,"default_branch":"master","last_synced_at":"2025-04-21T20:44:03.903Z","etag":null,"topics":["cardinal","declination","english-specific","humanizer","morphology","names","numeral","ordinal","pluralization","react","russian","russian-specific"],"latest_commit_sha":null,"homepage":"http://wapmorgan.github.io/Morphos/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wapmorgan.png","metadata":{"files":{"readme":"README-en.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2014-11-12T00:23:55.000Z","updated_at":"2025-04-21T20:03:55.000Z","dependencies_parsed_at":"2023-02-18T22:31:00.126Z","dependency_job_id":"6e235464-a987-4ef5-a4ae-524954266e12","html_url":"https://github.com/wapmorgan/Morphos","commit_stats":{"total_commits":466,"total_committers":21,"mean_commits":22.19047619047619,"dds":0.07081545064377681,"last_synced_commit":"3dcf53986e59f6117f902a10849b349504fe3fcd"},"previous_names":[],"tags_count":64,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wapmorgan%2FMorphos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wapmorgan%2FMorphos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wapmorgan%2FMorphos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wapmorgan%2FMorphos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wapmorgan","download_url":"https://codeload.github.com/wapmorgan/Morphos/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254219374,"owners_count":22034397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cardinal","declination","english-specific","humanizer","morphology","names","numeral","ordinal","pluralization","react","russian","russian-specific"],"created_at":"2024-10-11T06:54:39.737Z","updated_at":"2025-05-14T20:09:09.073Z","avatar_url":"https://github.com/wapmorgan.png","language":"PHP","readme":"# English\n\n* [Pluralization](#pluralization)\n* [Numerals](#numerals)\n\t* [Cardinal](#cardinal)\n\t* [Ordinal](#ordinal)\n* [Time units and intervals](#time-units-and-intervals)\n\nEnglish morphology shortcuts:\n\n- `morphos\\English\\NounPluralization::pluralize($word, $count)`\n- `morphos\\English\\CardinalNumeralGenerator::generate($number)`\n- `morphos\\English\\OrdinalNumeralGenerator::generate($number)`\n- `morphos\\English\\TimeSpeller::spellInterval(DateInterval $interval)`\n\nEnglish class hierarchy:\n\n```php\nmorphos\\\n        English\\\n                CardinalNumeralGenerator\n                OrdinalNumeralGenerator\n                NounPluralization\n                TimeSpeller\n```\n\n## Pluralization\nPluralization a word in English is possible with `NounPluralization` class:\n\n```php\nuse function morphos\\English\\pluralize;\nuse morphos\\English\\NounPluralization;\n\necho '10 '.NounPluralization::pluralize('foot') =\u003e '10 feet'\n// or if you don't know count of objects\n\n// or you can use shortcut\n$n = 1;\necho pluralize($n, 'foot') =\u003e '1 foot'\n// or API: GET /en/pluralize?count=...\u0026word=...\n```\n\n## Numerals\n\nAll number creation classes are similar and have one common methods:\n\n- `OrdinalNumeralGenerator::generate($number, bool $short= false)` - Generates an ordinal numeral for a number.\n  - API: `GET /en/ordinal?number=...`\n- `CardinalNumeralGenerator::generate($number)` - Generates a cardinal numeral for a number.\n  - API: `GET /en/cardinal?number=...`\n\n### Cardinal\n\n_Creation of cardinal numerals in english language (`CardinalNumeralGenerator`)._\n\n\n```php\nuse morphos\\English\\CardinalNumeralGenerator;\n\n// Get text representation of a number:\n$number = 4351;\n\nCardinalNumeralGenerator::generate($number) =\u003e 'four thousand, three hundred fifty-one'\n```\n\n### Ordinal\n\n_Creation of ordinal numerals in english language (`OrdinalNumeralGenerator`)._\n\n\n```php\nuse morphos\\English\\OrdinalNumeralGenerator;\n\n// Get text representation of a number or short form:\n$number = 4351;\n\nOrdinalNumeralGenerator::generate($number) =\u003e 'four thousand, three hundred fifty-first'\n// short form of ordinal numeral\nOrdinalNumeralGenerator::generate($number, true) =\u003e '4351st'\n```\n\n## Time units and intervals\n\nYou can generate text representation of time interval with `TimeSpeller` class:\n\n```php\nuse morphos\\English\\TimeSpeller;\n\n// generate text representation of 5 years and 2 months\n$interval = new DateInterval('P5Y2M');\n\nTimeSpeller::spellInterval($interval) =\u003e '5 years 2 months'\nTimeSpeller::spellInterval($interval, TimeSpeller::SEPARATE) =\u003e '5 years and 2 months'\n\n// or with API: GET /en/time/spellDifference?dateTime=...\u0026options=...\u0026limit=...\n// or with API: GET /en/time/spellInterval?interval=...\u0026options=...\u0026limit=...\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwapmorgan%2Fmorphos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwapmorgan%2Fmorphos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwapmorgan%2Fmorphos/lists"}