Nasty.Translation.WordOrder (Nasty v0.3.0)

View Source

Handles 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

reorder_noun_phrase(np, source_lang, target_lang)

@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"}]}

reorder_verb_phrase(vp, source_lang, target_lang)

@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"}]}