> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myspellchecker.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Component Diagram

> Visual representation of mySpellChecker's component architecture.

The diagrams below show how validation, data, utility, and algorithm layers interact within the system.

## High-Level Architecture

<img src="https://mintcdn.com/myspellchecker/LrG59DCXVrHk60Tz/images/componentdiagram.png?fit=max&auto=format&n=LrG59DCXVrHk60Tz&q=85&s=a9719417b4bf3b331ad6c9441036ffd7" alt="Component Diagram" width="2220" height="2340" data-path="images/componentdiagram.png" />

## Validation Layer Components

<Tree>
  <Tree.Folder name="SyllableValidator" defaultOpen>
    <Tree.Folder name="SyllableRuleValidator" defaultOpen>
      <Tree.File name="Structure rules" />

      <Tree.File name="Medial order" />

      <Tree.File name="Vowel compatibility" />
    </Tree.Folder>

    <Tree.Folder name="Dictionary Lookup" defaultOpen>
      <Tree.File name="Syllable exists?" />

      <Tree.File name="Frequency lookup" />
    </Tree.Folder>
  </Tree.Folder>
</Tree>

**↓**

<Tree>
  <Tree.Folder name="WordValidator" defaultOpen>
    <Tree.Folder name="Dictionary Lookup" defaultOpen>
      <Tree.File name="Word exists?" />

      <Tree.File name="Get frequency" />

      <Tree.File name="Get POS" />
    </Tree.Folder>

    <Tree.Folder name="SymSpell Algorithm" defaultOpen>
      <Tree.File name="Generate deletes" />

      <Tree.File name="Find suggestions" />

      <Tree.File name="Rank by distance" />
    </Tree.Folder>
  </Tree.Folder>
</Tree>

**↓**

<Tree>
  <Tree.Folder name="ContextValidator (Strategy-based)" defaultOpen>
    <Tree.Folder name="SyntacticValidationStrategy (Layer 2.5)" defaultOpen>
      <Tree.Folder name="POS Tagger" defaultOpen>
        <Tree.File name="Viterbi HMM" />

        <Tree.File name="Transformer" />

        <Tree.File name="Rule-based" />
      </Tree.Folder>

      <Tree.Folder name="SyntacticRuleChecker" defaultOpen>
        <Tree.File name="Particle rules" />

        <Tree.File name="Sequence rules" />

        <Tree.File name="Linguistic rules" />
      </Tree.Folder>
    </Tree.Folder>

    <Tree.Folder name="N-gram Checker" defaultOpen>
      <Tree.File name="Bigram probs" />

      <Tree.File name="Trigram probs" />

      <Tree.File name="Smoothing" />
    </Tree.Folder>

    <Tree.Folder name="Semantic Checker (Optional)" defaultOpen>
      <Tree.File name="ONNX model" />

      <Tree.File name="Embedding lookup" />
    </Tree.Folder>
  </Tree.Folder>
</Tree>

## SpellChecker Mixin Architecture

`SpellChecker` uses a mixin-based decomposition to organize detection and suggestion logic into focused modules while preserving a single public API surface:

<Tree>
  <Tree.Folder name="SpellChecker (core/spellchecker.py)" defaultOpen>
    <Tree.Folder name="PreNormalizationDetectorsMixin" defaultOpen>
      <Tree.File name="11 pre-normalization detectors" />

      <Tree.File name="Run before text normalization" />
    </Tree.Folder>

    <Tree.Folder name="PostNormalizationDetectorsMixin" defaultOpen>
      <Tree.File name="38 ordered detectors (via detection_registry.py)" />

      <Tree.File name="Particle confusion, medial confusion, compound typos, etc." />
    </Tree.Folder>

    <Tree.Folder name="SentenceDetectorsMixin" defaultOpen>
      <Tree.File name="10 sentence-level detectors" />

      <Tree.File name="Register mixing, tense mismatch, structure issues" />
    </Tree.Folder>

    <Tree.Folder name="SuggestionPipelineMixin" defaultOpen>
      <Tree.File name="24 suggestion/reranking methods" />

      <Tree.File name="Unified ranking across sources" />
    </Tree.Folder>

    <Tree.Folder name="ErrorSuppressionMixin" defaultOpen>
      <Tree.File name="21 suppression/dedup/merge methods" />

      <Tree.File name="Prevents duplicate errors at same position" />
    </Tree.Folder>
  </Tree.Folder>
</Tree>

### Detection Registry

The post-normalization detection pipeline is controlled by an ordered registry in `core/detection_registry.py`. Each entry maps to a `_detect_*` method inherited from detector mixins:

```python theme={null}
POST_NORM_DETECTOR_SEQUENCE = (
    # Stacking and structural errors (run first)
    "_detect_broken_stacking",              # Asat→virama in Pali words
    "_detect_missing_stacking",             # Missing Pali/Sanskrit virama stacking
    "_detect_missing_asat",                 # Missing asat on normalized text
    "_detect_missing_visarga_suffix",       # Missing visarga in clause-linker suffixes
    "_detect_missing_visarga_in_compound",  # Missing visarga inside compound words

    # Medial and particle confusion
    "_detect_medial_confusion",             # Medial ya-pin/ya-yit confusion
    "_detect_colloquial_contractions",      # Colloquial contraction detection
    "_detect_particle_confusion",           # Particle confusion (ကိ/ကု → ကို)
    "_detect_compound_confusion_typos",     # Compound confusion (ha-htoe + aspirated)
    "_detect_suffix_confusion_typos",       # Suffix confusion on invalid compounds

    # Token repair and frequency-based correction
    "_detect_invalid_token_with_strong_candidates",   # Invalid token repair via strong DB candidates
    "_detect_frequency_dominant_valid_variants",       # Valid-token variant correction via frequency + semantic
    "_detect_broken_compound_morpheme",     # Broken compound morpheme (ed-1 variant)
    "_detect_missegmented_confusable",      # Confusable errors hidden by segmentation

    # Particle and diacritic errors
    "_detect_ha_htoe_particle_typos",       # Ha-htoe particle confusion (မာ → မှာ)
    "_detect_aukmyit_confusion",            # Aukmyit confusion (ထည် → ထည့်)
    "_detect_extra_aukmyit_confusion",      # Extra aukmyit (ပြော့ → ပြော)
    "_detect_sequential_particle_confusion",# Sequential particle (တော် → တော့)
    "_detect_particle_misuse",              # Particle misuse via verb-frame (ကို → မှ/မှာ/တွင်)

    # Context-aware detectors
    "_detect_homophone_left_context",       # Homophone left-context (ဖက် → ဖတ်)
    "_detect_collocation_errors",           # Collocation error (wrong word partner)
    "_detect_semantic_agent_implausibility",# Non-human subject implausibility
    "_detect_merged_classifier_mismatch",   # Merged NUM+classifier mismatch

    # Sentence-level detectors
    "_detect_dangling_particles",           # Dangling sentence-end particles
    "_detect_sentence_structure_issues",    # Dangling word, missing conjunction
    "_detect_tense_mismatch",              # Temporal adverb vs particle mismatch
    "_detect_formal_yi_in_colloquial_context", # Verb+၏ in colloquial context
    "_detect_negation_sfp_mismatch",        # Negation pattern mismatch
    "_detect_merged_sfp_conjunction",       # Merged SFP + conjunction
    "_detect_missing_visarga",             # Missing visarga (း) via frequency ratio

    # Register and style
    "_detect_register_mixing",              # Formal/colloquial register mixing
    "_detect_informal_with_honorific",      # Informal particle + honorific
    "_detect_informal_h_after_completive",  # Terse ဟ after completive

    # Post-processing detectors
    "_detect_vowel_after_asat",             # Vowel after asat (ကျွန်ုတော် → ကျွန်တော်)
    "_detect_missing_diacritic_in_compound",# Missing anusvara/dot-below
    "_detect_unknown_compound_segments",    # Unknown freq=0 compound segments
    "_detect_broken_compound_space",        # Space inside compound word
    "_detect_punctuation_errors",           # Punctuation errors (lowest priority)
)
```

Ordering is intentional. For example, `broken_stacking` must run before `colloquial_contractions` to prevent stacking errors from being claimed as colloquial variants.

## Data Layer Components

`DictionaryProvider` defines the abstract interface:

* `is_valid_syllable(syllable)` → `bool`
* `is_valid_word(word)` → `bool`
* `get_word_frequency(word)` → `int`
* `get_bigram_probability(prev, curr)` → `float`

<Tree>
  <Tree.Folder name="DictionaryProvider (Abstract)" defaultOpen>
    <Tree.File name="SQLiteProvider (disk-based, indexed, default)" />

    <Tree.Folder name="MemoryProvider (RAM-based, fast, high mem)" defaultOpen>
      <Tree.File name="JSONProvider (testing, simple)" />

      <Tree.File name="CSVProvider (testing, simple)" />
    </Tree.Folder>
  </Tree.Folder>
</Tree>

## Algorithm Components

```python theme={null}
  Algorithm Layer
  ===============

  SymSpell                        N-gram Model
  +--------------------------+    +--------------------------+
  | Input:  misspelled word  |    | Input:  word sequence    |
  | Output: suggestions      |    | Output: probability      |
  |                          |    |                          |
  | • Delete Dict            |    | • Bigram Probs           |
  |   (word -> deletes)      |    |   P(word2 | word1)       |
  | • Prefix Index           |    | • Trigram Probs          |
  |   (fast lookup)          |    |   P(word3 | word1,word2) |
  |                          |    |                          |
  | Complexity: O(1)         |    | Complexity: O(1)         |
  +--------------------------+    +--------------------------+

  Viterbi POS                     Edit Distance (Cython)
  +--------------------------+    +--------------------------+
  | Input:  word sequence    |    | • Levenshtein            |
  | Output: POS tags         |    | • Damerau-Levenshtein    |
  |                          |    | • Optimized C            |
  | • Transition Probs       |    +--------------------------+
  |   P(tag | prev_tag)      |
  | • Emission Probs         |    Semantic Model (ONNX)
  |   P(word | tag)          |    +--------------------------+
  |                          |    | • Word embeddings        |
  | Complexity: O(nT^2)      |    | • Cosine similarity      |
  +--------------------------+    | • Neural network         |
                                  +--------------------------+
```

## Data Pipeline Components

```python theme={null}
  +------------------+     +---------------------+     +------------------+     +------------------+
  | CorpusIngester   | --> | CorpusSegmenter     | --> | FrequencyBuilder | --> | DatabasePackager |
  |                  |     | (Cython)            |     |                  |     |                  |
  | • Read files     |     | • Normalize         |     | • Count tokens   |     | • Create SQLite  |
  | • Parse formats  |     | • Segment           |     | • N-gram stats   |     | • Build indexes  |
  | • Validate       |     | • Parallel          |     | • Build tables   |     | • Optimize       |
  | • Stream         |     |                     |     |                  |     |                  |
  +------------------+     +---------------------+     +------------------+     +------------------+
```

## Component Interactions

### Check Operation Flow

See [Data Flow](/architecture/data-flow) for detailed check operation flow.

### Suggestion Generation Flow

```python theme={null}
  +------------------+
  | Unknown word     |
  +--------+---------+
           |
           v
  +----------------------------------+
  | SymSpell                         |
  |                                  |
  | 1. Generate deletes from input   |
  |            |                     |
  |            v                     |
  | 2. Look up each delete in        |
  |    pre-computed dictionary       |
  |            |                     |
  |            v                     |
  | 3. Find candidate words within   |
  |    edit distance                 |
  |            |                     |
  |            v                     |
  | 4. Rank by (edit_distance,       |
  |    frequency)                    |
  +------------+---------------------+
               |
               v
  +----------------------------------+
  | Suggestions [word1, word2, ...]  |
  +----------------------------------+
```

## Dependency Graph

<Tree>
  <Tree.Folder name="SpellChecker" defaultOpen>
    <Tree.File name="SyllableValidator → DictionaryProvider" />

    <Tree.Folder name="WordValidator → DictionaryProvider" defaultOpen>
      <Tree.File name="SymSpell → DictionaryProvider" />
    </Tree.Folder>

    <Tree.Folder name="ContextValidator → DictionaryProvider" defaultOpen>
      <Tree.File name="SQLiteProvider (default)" />

      <Tree.File name="MemoryProvider (alternative)" />
    </Tree.Folder>
  </Tree.Folder>
</Tree>

## See Also

* [Architecture Overview](/architecture/index) - High-level architecture
* [Data Flow](/architecture/data-flow) - Data flow diagrams
* [Extension Points](/architecture/extension-points) - Customization guide
