Summary
Add a Latin language pack (lat) to TRACE, mirroring the structure of the Arabic (ara, #16) and Greek (grc, #22) packs. Unlocks Vulgate, patristic, and scholastic material.
Motivation
Latin is a planned roadmap pack (Vulgata, patristic, scholastic) and part of the cross-tradition / Hexapla-style work (roadmap Stage 6). Reuses the language-pack architecture proven by the Arabic pack.
Scope
Mirror src/tracealign/lang/arabic/:
- Normalization (
normalize.py): lowercase; strip macrons / vowel-length diacritics (NFD + combining-mark removal) into text; orthographic skeleton folding — u/v unification, i/j unification, ae/æ → ae and oe/œ → oe. Keep the diplomatic form in Token.raw.
- Tokenization (
tokenize.py): Latin's analog to Arabic proclitics is the set of enclitics (-que, -ve, -ne). Start conservative — likely defer enclitic splitting for v0.1.0 (document it), or split only the unambiguous -que if justified.
- Scoring tiers (
scoring.py): EXACT → DIACRITICS_STRIPPED (macrons) → ORTHOGRAPHIC_VARIANT (u/v, i/j, ae/oe folding) → fuzzy, reusing the shared Reason enum values.
Acceptance criteria
Notes
- Rule-based and dependency-light (stdlib + existing
rapidfuzz). No new third-party dependencies.
- Roadmap: planned non-Hebrew language packs (Aramaic/Greek/Latin/Arabic/Persian).
Summary
Add a Latin language pack (
lat) to TRACE, mirroring the structure of the Arabic (ara, #16) and Greek (grc, #22) packs. Unlocks Vulgate, patristic, and scholastic material.Motivation
Latin is a planned roadmap pack (Vulgata, patristic, scholastic) and part of the cross-tradition / Hexapla-style work (roadmap Stage 6). Reuses the language-pack architecture proven by the Arabic pack.
Scope
Mirror
src/tracealign/lang/arabic/:normalize.py): lowercase; strip macrons / vowel-length diacritics (NFD + combining-mark removal) intotext; orthographicskeletonfolding —u/vunification,i/junification,ae/æ → aeandoe/œ → oe. Keep the diplomatic form inToken.raw.tokenize.py): Latin's analog to Arabic proclitics is the set of enclitics (-que,-ve,-ne). Start conservative — likely defer enclitic splitting for v0.1.0 (document it), or split only the unambiguous-queif justified.scoring.py): EXACT → DIACRITICS_STRIPPED (macrons) → ORTHOGRAPHIC_VARIANT (u/v, i/j, ae/oe folding) → fuzzy, reusing the sharedReasonenum values.Acceptance criteria
list_languages()includeslat;tokenize/alignwithlang="lat"work end-to-end.text; diplomatic form preserved inraw.Reasonenum (extend only if a genuinely Latin-specific reason is justified).flake8clean.pack.versionset (lat-0.1.0) and surfaced in resultparams.Notes
rapidfuzz). No new third-party dependencies.