Liking cljdoc? Tell your friends :D

Daitch-Mokotoff Soundex Algorithm Extraction

Terminology. A phoneme is a contrastive unit of sound. The IPA symbols used below denote, among others: ʃ ("sh"), ("ch"), ("j"), ʒ (the "s" in measure), and x (the voiceless velar fricative, as in Scottish loch or Hebrew chet). Place of articulation is where the vocal tract is constricted; manner of articulation is how airflow is shaped; voicing is whether the vocal folds vibrate. See ../GLOSSARY.md for fuller definitions.

Algorithm Overview

Daitch-Mokotoff Soundex (D-M Soundex) was developed by Gary Mokotoff and Randy Daitch in 1985 specifically for Jewish and Eastern European surnames. It addresses limitations of American Soundex for these names. Each extracted rule carries a weight in [0, 1] expressing the residual edit cost of treating the two spellings as equivalent.

Key Differences from American Soundex

FeatureAmerican SoundexDaitch-Mokotoff
Code Length4 characters6 digits
First LetterRetained literallyEncoded
Multiple CodesNoYes (branching)
Slavic SoundsPoorExcellent
Hebrew SoundsPoorGood

Encoding Rules

D-M Soundex uses a more extensive mapping with context-sensitivity:

Vowel Codes

PatternStartBefore VowelOther
A, E, I, O, U, Y0--
AI, AJ, AY01-
AU07-
EI, EJ, EY01-
EU11-
OI, OJ, OY01-

Consonant Codes

PatternStartBefore VowelOther
B777
CH5,45,45,4
CK5,455,455,45
CZ, CS, CSZ444
D333
DRZ, DRS444
DS, DSH, DSZ444
DT333
DZ, DZH, DZS444
G555
H55-
K555
KH555
KS545454
L888
M666
MN666666
N666
NM666666
P, PH, PF777
R999
RZ, RS94,494,494,4
S444
SCH444
SH444
SCHTCH, SCHTSCH244
SHTCH, SHCH, SHTSH244
ST, STRZ, STRS, STSH244
SZCZ, SZCS244
SZ444
T333
TCH, TTCH, TTSCH444
TH333
TRZ, TRS444
TSCH, TSH444
TS, TSZ, TZ, TTZ444
V777
W777
X5,545454
Z444
ZDZ, ZDZH, ZHDZH244
ZD244
ZH, ZS444

Extracted Rules

Polish Consonant Clusters

[id: 3000, name: "szcz dm", weight: 0.10, group: dm_clusters, ipa: "/ʃtʃ/"]
szcz -> ʃtʃ;

[id: 3001, name: "strz dm", weight: 0.10, group: dm_clusters, ipa: "/ʃtʃ/"]
strz -> ʃtʃ;

[id: 3002, name: "strs dm", weight: 0.10, group: dm_clusters]
strs -> ʃtʃ;

[id: 3003, name: "stsh dm", weight: 0.10, group: dm_clusters]
stsh -> ʃtʃ;

[id: 3010, name: "cz dm", weight: 0.10, group: dm_cz, ipa: "/tʃ/"]
cz -> tʃ;

[id: 3011, name: "cs dm", weight: 0.10, group: dm_cz]
cs -> tʃ;

[id: 3012, name: "csz dm", weight: 0.10, group: dm_cz]
csz -> tʃ;

[id: 3015, name: "sz dm", weight: 0.10, group: dm_sz, ipa: "/ʃ/"]
sz -> ʃ;

DRZ/DRS/DZ Patterns

[id: 3020, name: "drz dm", weight: 0.10, group: dm_drz, ipa: "/dʒ/"]
drz -> dʒ;

[id: 3021, name: "drs dm", weight: 0.10, group: dm_drz]
drs -> dʒ;

[id: 3022, name: "dz dm", weight: 0.10, group: dm_dz, ipa: "/dz/"]
dz -> dz;

[id: 3023, name: "dzh dm", weight: 0.10, group: dm_dz]
dzh -> dʒ;

[id: 3024, name: "dzs dm", weight: 0.10, group: dm_dz]
dzs -> dʒ;

ZDZ Patterns (Word-initial)

[id: 3030, name: "zdz initial dm", weight: 0.10, group: dm_zdz]
zdz -> ʒdʒ / #_;

[id: 3031, name: "zdzh initial dm", weight: 0.10, group: dm_zdz]
zdzh -> ʒdʒ / #_;

[id: 3032, name: "zhdzh initial dm", weight: 0.10, group: dm_zdz]
zhdzh -> ʒdʒ / #_;

TCH/TSH Patterns

[id: 3040, name: "tch dm", weight: 0.10, group: dm_tch, ipa: "/tʃ/"]
tch -> tʃ;

[id: 3041, name: "ttch dm", weight: 0.10, group: dm_tch]
ttch -> tʃ;

[id: 3042, name: "ttsch dm", weight: 0.10, group: dm_tch]
ttsch -> tʃ;

[id: 3043, name: "tsch dm", weight: 0.10, group: dm_tch]
tsch -> tʃ;

[id: 3044, name: "tsh dm", weight: 0.10, group: dm_tch]
tsh -> tʃ;

TRZ/TRS Patterns

[id: 3050, name: "trz dm", weight: 0.10, group: dm_trz, ipa: "/tʃ/"]
trz -> tʃ;

[id: 3051, name: "trs dm", weight: 0.10, group: dm_trz]
trs -> tʃ;

CH Variants

[id: 3055, name: "ch to kh dm", weight: 0.15, group: dm_ch, ipa: "/x/"]
ch -> x;  // Hebrew/Yiddish sound

[id: 3056, name: "ch to tsh dm", weight: 0.15, group: dm_ch, ipa: "/tʃ/"]
ch -> tʃ;  // Slavic variant

RZ/RS Patterns

[id: 3060, name: "rz dm", weight: 0.10, group: dm_rz, ipa: "/ʒ/"]
rz -> ʒ;

[id: 3061, name: "rs dm", weight: 0.15, group: dm_rz]
rs -> ʒ;  // In Polish context

Diphthongs

[id: 3070, name: "ai dm", weight: 0.10, group: dm_diphthong]
ai -> aj;

[id: 3071, name: "aj dm", weight: 0.10, group: dm_diphthong]
aj -> aj;

[id: 3072, name: "ay dm", weight: 0.10, group: dm_diphthong]
ay -> aj;

[id: 3073, name: "ei dm", weight: 0.10, group: dm_diphthong]
ei -> aj;

[id: 3074, name: "ej dm", weight: 0.10, group: dm_diphthong]
ej -> aj;

[id: 3075, name: "ey dm", weight: 0.10, group: dm_diphthong]
ey -> aj;

[id: 3076, name: "oi dm", weight: 0.10, group: dm_diphthong]
oi -> oj;

[id: 3077, name: "oj dm", weight: 0.10, group: dm_diphthong]
oj -> oj;

[id: 3078, name: "oy dm", weight: 0.10, group: dm_diphthong]
oy -> oj;

[id: 3079, name: "au dm", weight: 0.10, group: dm_diphthong]
au -> au;

[id: 3080, name: "eu dm", weight: 0.10, group: dm_diphthong]
eu -> oj;  // Yiddish pronunciation

Common Jewish Name Elements

// Gold- element
[id: 3090, name: "gold prefix dm", weight: 0.05, group: dm_element]
gold -> gold / #_;

// -berg element
[id: 3091, name: "berg suffix dm", weight: 0.05, group: dm_element]
berg -> berg / _#;

// -stein element
[id: 3092, name: "stein suffix dm", weight: 0.05, group: dm_element]
stein -> ʃtajn / _#;

// Rosen- element
[id: 3093, name: "rosen prefix dm", weight: 0.05, group: dm_element]
rosen -> rozen / #_;

// -witz/-vitz element
[id: 3094, name: "witz suffix dm", weight: 0.05, group: dm_element]
witz -> vits / _#;

// -baum element
[id: 3095, name: "baum suffix dm", weight: 0.05, group: dm_element]
baum -> boim / _#;

// -feld element
[id: 3096, name: "feld suffix dm", weight: 0.05, group: dm_element]
feld -> feld / _#;

Branching Codes

D-M Soundex produces multiple codes when a pattern can be interpreted multiple ways. In LLev, this maps to non-deterministic rules with varying weights:

// CH can be /x/ (Hebrew) or /tʃ/ (Slavic)
[id: 3055, weight: 0.15]
ch -> x;

[id: 3056, weight: 0.20]
ch -> tʃ;

Both outputs are generated; the weight difference prioritizes the more common interpretation while still matching the alternate.

Use Cases

D-M Soundex excels at matching:

  • Jewish surnames (Ashkenazic, Sephardic)
  • Polish surnames
  • Russian surnames
  • Ukrainian surnames
  • Hungarian surnames
  • Romanian surnames

References

  1. Mokotoff, Gary & Daitch, Randy (1985). Daitch-Mokotoff Soundex System. Avotaynu, Bergenfield, NJ. (No DOI; canonical source of the D-M Soundex algorithm.)
  2. Mokotoff, Gary (1997). "Soundexing and Genealogy". Avotaynu 13(3). (No DOI.)
  3. Avotaynu, "Daitch-Mokotoff Soundex Coding". https://www.avotaynu.com/soundex.htm

← Documentation Index

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close