Nasty.Translation.Agreement (Nasty v0.3.0)

View Source

Enforces grammatical agreement in target language.

Different languages require agreement between words:

  • Gender agreement: adjectives, articles, determiners agree with nouns (Spanish, Catalan)
  • Number agreement: verbs agree with subjects, adjectives with nouns
  • Person agreement: verb conjugation matches subject person

English has minimal agreement (only number and person for verbs), while Romance languages have extensive agreement.

Usage

alias Nasty.AST.{NounPhrase, Token}
alias Nasty.Translation.Agreement

# Enforce agreement in noun phrase
np = %NounPhrase{
  determiner: %Token{text: "el"},
  modifiers: [],
  head: %Token{text: "gata", morphology: %{gender: :f}}
}

corrected = Agreement.enforce_noun_phrase_agreement(np, :es)
# => %NounPhrase{determiner: %Token{text: "la"}, ...}

Summary

Functions

Enforces agreement in a noun phrase based on the head noun's features.

Enforces subject-verb agreement in a clause.

Functions

enforce_noun_phrase_agreement(np, lang)

@spec enforce_noun_phrase_agreement(Nasty.AST.NounPhrase.t(), atom()) ::
  Nasty.AST.NounPhrase.t()

Enforces agreement in a noun phrase based on the head noun's features.

Modifies determiners, modifiers (adjectives), and post-modifiers to agree with the head noun in gender and number.

Examples

iex> np = %NounPhrase{head: %Token{morphology: %{gender: :f, number: :sg}}, ...}
iex> Agreement.enforce_noun_phrase_agreement(np, :es)
# Adjusts all modifiers to feminine singular

enforce_subject_verb_agreement(clause, lang)

@spec enforce_subject_verb_agreement(Nasty.AST.Clause.t(), atom()) ::
  Nasty.AST.Clause.t()

Enforces subject-verb agreement in a clause.

Ensures the verb agrees with its subject in person and number.

Examples

iex> clause = %Clause{subject: np, predicate: vp, ...}
iex> Agreement.enforce_subject_verb_agreement(clause, :es)
# Conjugates verb to match subject person/number