Euspell
Docs

SSML & POS lexicons

Because conversion has already resolved ambiguity into the spelling, two useful lexicons fall out of the same data — one mapping each reformed grapheme to a pronunciation, one to a part of speech.

The shared insight
English's hardest TTS and tagging cases are homographs — records (noun) vs records (verb). Euspell has already split them into distinct graphemes, each with exactly one reading. So a context-free lexicon — normally a poor fit for English — becomes exactly right, because the context is baked into the orthography.

1 · A pronunciation lexicon (SSML / PLS)

To read already-converted Euspell text aloud, a TTS engine needs to pronounce the new spellings (recordz, wynd) — which are non-words to it — correctly. The answer is a W3C Pronunciation Lexicon (PLS): one role-free <lexeme> per reformed grapheme, one phoneme each.

dict/euspell_tts.pls
<lexeme><grapheme>recordz</grapheme><phoneme>rɪˈkɔːrdz</phoneme></lexeme>
<lexeme><grapheme>records</grapheme><phoneme>ˈrɛkərdz</phoneme></lexeme>
<lexeme><grapheme>wynd</grapheme><phoneme>waɪnd</phoneme></lexeme>

Two members are pinned per diatone: the reformed spelling and the unchanged base form — because the distinction is often stress, not segments (records and recordz both end /dz/), which a TTS can't infer from converted text alone. Since Euspell is itself a phonetic respelling, deriving IPA from the grapheme is largely rule-based; stress comes from the stored part of speech.

2 · A POS lexicon for grammar checkers

The same split graphemes yield one part of speech each — a real information gain for a tagger. This helps open, POS-driven checkers:

TargetCan consume it?Verdict
LanguageToolYes — Morfologik tagger dictionaryThe real yes
Harper (Rust)Yes — per-word WordMetadataIn principle, via a metadata converter
HunspellNo POS — spelling onlyStops false spell-flags, no grammar help
Word, Google Docs, GrammarlyClosedCan't be helped this way

The build

gen-pos-lexicon.js emits new spellings only— a clean supplement that adds tags for words the checker doesn't know — with CLAWS7 crosswalked to the target tagset (NN2→NNS, VVZ→VBZ, and so on):

dict/euspell_pos.tsv (LanguageTool Morfologik source)
recordz    recordz    VBZ      # verb heteronym: unambiguous verb
aahz       aahz       VBZ      # single-spelling reform, full POS
aardwolvs  aardwolvs  NNS

A parallel emitter reshapes the same derivation into Harper-style JSON. Both share one derivation module, so the linguistic content stays in one place.

Honest limits

Handing a checker these lexicons helps in one direction and hurts in the other. Any rule that looks for a particular English word stops firing the moment that word is spelled differently, so rules built on word patterns get worse. Rules about grammar rather than spelling get better, because the reformed words now carry tags where before the checker had never heard of them.

What tags cannot fix is a word like read or bow, where both senses are the same part of speech. Each spelling gets the full set of tags, so the checker knows the word and types it correctly — it just cannot tell you which of the two you meant.