Skip to main content

Rule-based Malayalam morphological synthesizer (noun and verb inflection generation).

Project description

mlinflect

A rule-based Malayalam morphological synthesizer. It does forward morphological generation: given a root and grammatical features, it produces the inflected surface form (the counterpart to morphological analysis/segmentation).

from mlinflect import synthesize_noun, synthesize_verb, with_clitic, Case, Clitic, Number, VerbForm

synthesize_noun("മരം", Case.LOCATIVE).surface          # 'മരത്തിൽ'
synthesize_noun("മരം", Case.GENITIVE).surface          # 'മരത്തിന്റെ'
synthesize_noun("കുട്ടി", Case.GENITIVE).surface        # 'കുട്ടിയുടെ'
synthesize_noun("മരം", Case.NOMINATIVE, number=Number.PLURAL).surface  # 'മരങ്ങൾ'

with_clitic(synthesize_noun("കുട്ടി", Case.ACCUSATIVE), Clitic.UM).surface  # 'കുട്ടിയെയും'

synthesize_verb("ഓടുക", VerbForm.PAST).surface          # 'ഓടി'
synthesize_verb("കൊടുക്കുക", VerbForm.PAST).surface      # 'കൊടുത്തു'
synthesize_verb("ഓടുക", VerbForm.PRESENT_NEGATIVE).surface  # 'ഓടുന്നില്ല'

Why this exists

Existing Malayalam morphology tools are either copyleft (Apertium, libindic = GPL/AGPL) or, in the case of the one permissive generator (mlmorph, MIT), built on a GPL FST runtime. There is no permissive, dependency-clean, rule-based Malayalam synthesizer. mlinflect aims to fill that gap with a small pure-Python rule engine and no copyleft dependencies.

Design

  • Declarative, provenance-tagged rules (mlinflect/rules.py): each rule cites the source it was drawn from and carries a verified flag that is True only when the form has been ratified by a native reviewer. Adding or correcting a paradigm is a data edit, not a code change.
  • Inspectable results: every synthesize_noun(...) returns a SynthResult with the surface form, the morphemes that compose it, the stem_class, the provenance key, and verified. Feature combinations that are not yet encoded raise rather than return a silently wrong form.
  • Akshara-correct joins: suffixes are represented matra-initial so concatenation produces correct conjuncts/vowel signs; the genitive uses the canonical nta form (NA + virama + RRA).

Status

Alpha. Eleven ending-conditioned noun classes across 11 cases, covering the major Malayalam noun shapes, with every encoded form native-ratified (verified=True); shapes outside the supported classes raise rather than guess. Five classes (am_neuter മരം, vowel_anuswara കലാം, i_vowel കുട്ടി/സ്ത്രീ, u_vowel പശു, ṭ_geminate വീട്) are complete in singular and plural; a_stem (അമ്മ) and the chillu classes (അവൻ, മകൾ, കാർ, കാൽ, തൂൺ) are singular-complete; their plurals are animacy-conditioned across the full paradigm (inanimate -കൾ/-ഉകൾ, human -മാർ/-ന്മാർ/-കാർ, animate -കൾ). Suppletive personal pronouns (ഞാൻ, നീ, അവർ, നാം, താൻ, ഇവൻ) are handled through an exception table rather than the rule engine. A derive_feminine helper builds a feminine lemma from a masculine base (എഴുത്തുകാരൻ → എഴുത്തുകാരി) before inflection. Includes differential object marking and a synthetic/colloquial register for the instrumental. Clitics (-ഉം, -ഓ, -തന്നെ) attach via with_clitic. Verbs (synthesize_verb) cover the finite forms: present, future, past (allomorphy by ending plus an irregular lexicon), negation, imperative, and a few moods. See LIMITATIONS.md for the precise gaps. Postpositions, stylistic variants, and verb aspects/participles/voice are future work.

Install

pip install mlinflect
# from source:
pip install -e ".[dev]"

License

Apache-2.0. See LICENSE and NOTICE. Contributions are accepted under Apache-2.0 §5 (inbound = outbound); no separate CLA is required.

Linguistic sources are credited in REFERENCES.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mlinflect-0.1.0.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mlinflect-0.1.0-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

Details for the file mlinflect-0.1.0.tar.gz.

File metadata

  • Download URL: mlinflect-0.1.0.tar.gz
  • Upload date:
  • Size: 29.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.16

File hashes

Hashes for mlinflect-0.1.0.tar.gz
Algorithm Hash digest
SHA256 78190f2d0dc7d18692694ae822b728e5df9b255b1454a82511d6c6ec8a4357b9
MD5 127cb46a0bd49fe8efaaf8cbbbf8f99e
BLAKE2b-256 399c005a929af43ee093e1f23b41db8868ab2be76bcc54ed670ceaff14f6230e

See more details on using hashes here.

File details

Details for the file mlinflect-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mlinflect-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.16

File hashes

Hashes for mlinflect-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9674be2ece822a761ee434624e09b85d9bd22a80308e47c48c40a878ed18aba8
MD5 c9a2a719cf2fa301f8fa5da36b0087cf
BLAKE2b-256 2afe446a1777e832d6078f06b7c7264be0f8a5008606aa4ce2b4392cc19ababf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page