Nasty.Translation.WordOrder (Nasty v0.3.0)
View SourceHandles word order transformations between languages.
Different languages have different word order patterns:
- Adjective placement: English pre-nominal (big cat) vs Spanish/Catalan post-nominal (gato grande)
- Adverb placement: varies by type and language
- Question word order: subject-verb inversion
- Object placement: SVO vs SOV languages
Usage
alias Nasty.AST.{NounPhrase, VerbPhrase}
alias Nasty.Translation.WordOrder
# Reorder noun phrase from English to Spanish
np = %NounPhrase{children: [adj, noun]}
reordered = WordOrder.reorder_noun_phrase(np, :en, :es)
# => %NounPhrase{children: [noun, adj]}
Summary
Functions
Reorders a noun phrase according to target language rules.
Reorders a verb phrase according to target language rules.
Functions
@spec reorder_noun_phrase(Nasty.AST.NounPhrase.t(), atom(), atom()) :: Nasty.AST.NounPhrase.t()
Reorders a noun phrase according to target language rules.
English: adjective + noun (big cat) Spanish/Catalan: noun + adjective (gato grande)
Exceptions:
- Some Spanish adjectives precede noun (buen, mal, gran, viejo, joven)
- Quantifiers and determiners always precede noun
Examples
iex> np = %NounPhrase{children: [%Token{text: "big"}, %Token{text: "cat"}]}
iex> WordOrder.reorder_noun_phrase(np, :en, :es)
%NounPhrase{children: [%Token{text: "cat"}, %Token{text: "big"}]}
@spec reorder_verb_phrase(Nasty.AST.VerbPhrase.t(), atom(), atom()) :: Nasty.AST.VerbPhrase.t()
Reorders a verb phrase according to target language rules.
Handles adverb placement and auxiliary verb order.
Examples
iex> vp = %VerbPhrase{children: [%Token{text: "often"}, %Token{text: "runs"}]}
iex> WordOrder.reorder_verb_phrase(vp, :en, :es)
%VerbPhrase{children: [%Token{text: "runs"}, %Token{text: "often"}]}