Nasty.Translation.Agreement (Nasty v0.3.0)
View SourceEnforces 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
@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
@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