Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

README.md

2.04 Kb · 45 lines

gno.land/p/moul/x/daily/soundex/v0

Soundex phonetic algorithmEncode, Match, EncodeAll, Normalize.

Names that sound alike in English encode to the same four-character key: Robert and Rupert both give R163.

1import "gno.land/p/moul/x/daily/soundex/v0"
2
3soundex.Encode("Robert")    // "R163"
4soundex.Encode("Ashcraft")  // "A261"
5soundex.Match("Robert", "Rupert")  // true

The 1918 Russell/Odell algorithm as used by the US census, with the three rules that are usually got wrong implemented explicitly — each has a test:

  • the first letter keeps its own code and still suppresses a following consonant of the same code, so PfisterP236, not P123;
  • h and w are transparent: consonants either side are treated as adjacent, so AshcraftA261, not A226;
  • vowels are not transparent — they separate, so a repeated code after a vowel is emitted again: TymczakT522.

Non-letters are ignored, so O'Brien and OBrien agree. Input with no ASCII letters has no key (""), and Match never reports two such inputs as matching — "no name" is not a name they share.

Soundex is English-centric and lossy by design: it is a blocking key for finding candidates cheaply, never proof that two names are the same.

Live demo: r/moul/x/daily/soundexdemo · render it at /r/moul/x/daily/soundexdemo/v0.


Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.

🧪 Highly experimental — potentially vibe-coded. Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: DISCLAIMER.