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

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

/p/g1magld5ptgzaktqcexxq0pgq5lmdf0kz6re8hlv/x/daily/soundex/v0

Directory · 4 Files
README.md Open

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

Soundex phonetic algorithm — Encode, 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 Pfister → P236, not P123;
  • h and w are transparent: consonants either side are treated as adjacent, so Ashcraft → A261, not A226;
  • vowels are not transparent — they separate, so a repeated code after a vowel is emitted again: Tymczak → T522.

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.