Home / Blog / Building Amharic AI: A Developer's Guide to Linguistic Complexity
blog

Building Amharic AI: A Developer's Guide to Linguistic Complexity

WesenAI Research Team • •
#amharic#linguistics#ai#nlp#ge'ez#morphology
Building Amharic AI: A Developer's Guide to Linguistic Complexity

1. The Ge’ez Script

Amharic uses the Ge’ez script, an abugida. Each character represents a syllable: ላ is one character for la.

The Seven Orders

OrderVowel SoundExample with ለ (l)Pronunciation
1st”ä”ለlä
2nd”u”ሉlu
3rd”i”ሊli
4th”a”ላla
5th”e”ሌle
6th”ə” or silentልlə (or just ‘l’)
7th”o”ሎlo

33 base consonants across seven orders give 231 core characters. Special characters for labialized consonants (like ኰ for kʷə) take the set past 300.

Similar Shapes

Many characters differ by a small stroke or curve:

  • በ (bä) vs. ቤ (be) vs. ቦ (bo)
  • ነ (nä) vs. ኔ (ne) vs. ኖ (no)

A blurry image can make an OCR model confuse them. A TTS model that reads በ as ቤ says the wrong sound.

Unicode Normalization

Standard Unicode normalization forms (NFC, NFKC) do not resolve orthographic variation in Amharic. Ethiopic characters (U+1200 to U+137F) are precomposed syllabic codepoints. Unlike Korean Hangul, they have no canonical decomposition:

  • unicodedata.normalize('NFKC', "ላ") will not decompose into a consonant ለ and vowel አ.
  • Standard Unicode algorithms will never merge historical homophones (e.g., ሠ into ሰ or ዐ into አ).

A purpose-built normalizer has to unify homophone families and standardize Ethiopic punctuation:

import re
import unicodedata

class AmharicNormalizer:
    """
    Normalizer for Ethiopic/Amharic script.
    
    Standardizes:
    - 4 Homophone families: [h] (ሀ, ሐ, ኀ, ኸ -> ሀ), [s] (ሰ, ሠ -> ሰ),
                            [ʔ] (አ, ዐ -> አ), [tsʼ] (ጸ, ፀ -> ጸ)
    - Punctuation marks: Ethiopic word divider (፡ -> space), four dots (። -> .)
    - Punctuation to ASCII equivalents for downstream tokenizers
    """
    HOMOPHONE_MAP = {
        # H-family: ሐ, ኀ, ኸ -> ሀ
        'ሐ': 'ሀ', 'ሑ': 'ሁ', 'ሒ': 'ሂ', 'ሓ': 'ሃ', 'ሔ': 'ሄ', 'ሕ': 'ህ', 'ሖ': 'ሆ',
        'ኀ': 'ሀ', 'ኁ': 'ሁ', 'ኂ': 'ሂ', 'ኃ': 'ሃ', 'ኄ': 'ሄ', 'ኅ': 'ህ', 'ኆ': 'ሆ',
        'ኸ': 'ሀ', 'ኹ': 'ሁ', 'ኺ': 'ሂ', 'ኻ': 'ሃ', 'ኼ': 'ሄ', 'ኽ': 'ህ', 'ኾ': 'ሆ',
        # S-family: ሠ -> ሰ
        'ሠ': 'ሰ', 'ሡ': 'ሱ', 'ሢ': 'ሲ', 'ሣ': 'ሳ', 'ሤ': 'ሴ', 'ሥ': 'ስ', 'ሦ': 'ሶ', 'ሧ': 'ሷ',
        # A-family: ዐ -> አ
        'ዐ': 'አ', 'ዑ': 'ኡ', 'ዒ': 'ኢ', 'ዓ': 'ኣ', 'ዔ': 'ኤ', 'ዕ': 'እ', 'ዖ': 'ኦ',
        # Ts-family: ፀ -> ጸ
        'ፀ': 'ጸ', 'ፁ': 'ጹ', 'ፂ': 'ጺ', 'ፃ': 'ጻ', 'ፄ': 'ጼ', 'ፅ': 'ጽ', 'ፆ': 'ጾ',
    }

    PUNCT_MAP = {
        '፡': ' ',   # Word divider (həlätt nət'əb) -> Space
        '።': '.',   # Full stop (arat nət'əb) -> Period
        '፣': ',',   # Netela serez -> Comma
        '፤': ';',   # Derreb serez -> Semicolon
        '፥': ':',   # Colon
        '፦': ':-',  # Preface colon
        '፧': '?',   # Question mark
        '፨': '\n\n' # Section divider
    }

    @classmethod
    def normalize(cls, text: str) -> str:
        if not text:
            return ""
        # 1. NFC normalize
        text = unicodedata.normalize("NFC", text)
        # 2. Normalize Ethiopic punctuation
        for p, r in cls.PUNCT_MAP.items():
            text = text.replace(p, r)
        # 3. Map homophones across all orders
        for h, r in cls.HOMOPHONE_MAP.items():
            text = text.replace(h, r)
        # 4. Collapse consecutive whitespace
        return re.sub(r'[ ]+', ' ', text).strip()

# Example usage:
raw_text = "ሠላም፡ለዓለም።ድኅነት፡ወይስ፡ድህነት፧"
clean_text = AmharicNormalizer.normalize(raw_text)
print(clean_text)

2. Gemination

Gemination lengthens a consonant and can change a word’s meaning, but it isn’t written.

Written WordPronunciationMeaning
አለ (alä)[ʔalɐ] (short ‘l’)“He said”
አለ (allä)[ʔallɐ] (geminate ‘l’)“There is”
ገና (gäna)[gɐnɐ] (short ‘n’)“Still / Not yet”
ገና (Gänna)[gɐnnɐ] (geminate ‘n’)“Christmas”

A TTS model has to choose the pronunciation of አለ from the sentence. An STT model has to hear the difference in duration.

Gemination patterns follow Semitic morphological rules (Type A, Type B, and frequentative reduplication):

Root: ሰ-ብ-ር (s-b-r, "break")

Basic Imperfective vs. Frequentative:
- ይሰብራል (yəsäbrall) - "he breaks" (medial C2 singleton in imperfective)
- ይሰባብራል (yəsäbabbərall) - "he breaks into pieces / shatters" (frequentative: reduplicated C2 with 4th order vowel 'a')

Basic Perfective vs. Frequentative Causative:
- ሰበረ (säbbärä) - "he broke" (geminated medial C2 in Type A perfective)
- አሰባበረ (assäbabbärä) - "he shattered / caused to smash into pieces" (causative frequentative)

3. Honorifics

Pronouns and verbs change with the listener’s age, social status and gender, and with the formality of the situation. Telling someone to “come”:

  • ና (nā): for a close friend or a child.
  • ይምጡ (yəmtu): for an elder or someone you want to show respect to.

If a user says, “Tell my boss I’ll be late,” the formal ለአለቃዎ እንደማረፍድ እባክዎ ይንገሩልኝ is right and the informal ለአለቃህ ንገረው አረፈድኩ is rude.

4. Morphology

Amharic is Semitic and uses a root-and-pattern system. The root ሰ-ብ-ር (s-b-r) carries the idea of “breaking”:

  • ሰበረ (säbärä) - “he broke”
  • ሰባሪ (säbari) - “one who breaks”
  • ስብረት (səbrät) - “the act of breaking”
  • መሰበር (mäsäbər) - “to break” (the infinitive)

Agglutination

Prefixes and suffixes pack a clause into one word: አላስተማረችኝም (alastämaräččəññəm) - “She did not teach me.”

  • አል- (al-): The “not” part (negation).
  • -አስ- (-as-): The “caused to” part (causative).
  • -ተማረ- (-tämarä-): The root for “learn.” With the causative, “teach.”
  • -ች- (-čč-): The “she” part.
  • -ኝ- (-ññ): The “me” part.
  • -ም (-m): The other “not” part (negation).

A dictionary lookup on this word fails. It needs a morphological analyzer.

5. Word Order

Amharic is Subject-Object-Verb (SOV): The child (S) the bread (O) ate (V).

Speakers move words to change emphasis:

  • ልጁ ዳቦውን በላ (ləǧu daboən bäla): “The child ate the bread.” (Neutral)
  • ዳቦውን ልጁ በላ (daboən ləǧu bäla): “It was the bread that the child ate.” (Focus on the object)
  • ልጁ ነው ዳቦውን የበላው (ləǧu näw daboən yäbälaw): “It was the child who ate the bread.” (Focus on the subject)