Word-level spelling suggestion: 16 languages, 16 wins

kotoshu matches or beats the strongest open word-level baselines — Hunspell and SymSpell over the same published frequency lists — on nonword top-1 in all 16 languages, and is the only engine with realword signal in most of them.

languagekotoshu top-1top-3top-5 best baselinerealword (k vs field)gate
en87.696.198.086.52.5 vs 1.0WIN
de87.895.697.486.817.0 vs 0.0WIN
es85.596.197.584.014.0 vs 0.0WIN
fr84.394.897.381.514.0 vs 7.5WIN
it87.295.997.884.30.0 vs 0.0WIN
ja73.989.694.472.3—WIN
ko63.190.596.662.90.0 vs 0.0WIN
nl86.595.497.083.70.0 vs 0.0WIN
pl88.096.798.486.40.0 vs 0.0WIN
pt82.592.997.180.113.0 vs 0.0WIN
ru88.296.798.987.36.0 vs 0.0WIN
vi68.783.088.566.4only-nonzeroWIN
zh-Hans-CN76.195.598.075.5—WIN
zh-Hant-TW81.798.199.581.5—WIN
zh-Hant-HK77.096.898.475.42.5 vs 0.0WIN
ar68.088.494.165.826.5 vs 0.0WIN

The realword story

Word-level baselines cannot tell a wrong word from a rare one. The fasttext context model can: Arabic realword 26.5% top-1 where both baselines score zero, German 17.0%, Spanish 14.0%, Portuguese 13.0%. That is the product difference between a frequency list and a model.

The honesty story

Arabic first froze at 16.1% — a number we published internally, then investigated. The fault was ours: 303 of its 2,000 "misspellings" were correctly-spelled words (the engine rightly refuses to correct a real word). We fixed the test, re-measured every language on clean splits, and the table above is the result. Every fix that got here is a merged, reviewed PR: variant-pure frequency lists for the three Chinese variants (zh-Hant-HK went 59.4 → 77.0), vowelless-script normalization so vocalized Arabic and Hebrew input works (مُحَمَّد now suggests محمد), and no more duplicate words burning suggestion slots.

Method. Exact-match top-1 over frozen, per-class-tagged splits (2,000 nonword + 200 realword pairs per language). Field lanes: SymSpell (symspellpy 6.10.0) and Hunspell 1.7.2 over the same published kotoshu frequency lists. Environment pinned (Ruby 3.4.8). Every number is a committed report: eval/reports.

For users

Same API, better engine: gem install kotoshu (1.0.7), cargo add kotoshu (0.3.0); server deployments pick the gem up on their next build. Variant users (zh-Hant-HK/TW/CN) get their own vocabulary; Arabic and Hebrew users get vocalized-input support; every language gets a cleaner suggestion slate.