Terminology. A phoneme is a contrastive unit of sound. The IPA symbols used below denote, among others:
ʃ("sh"),tʃ("ch"),dʒ("j"),ʒ(the "s" in measure),x(voiceless velar fricative),ɲ(palatal nasal), and the palatalized consonantsdʲ,tʲ. 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; final devoicing turns a voiced consonant voiceless at a word boundary. See../GLOSSARY.mdfor fuller definitions.
Beider-Morse Phonetic Matching (BMPM) was developed by Alexander Beider and Stephen P. Morse in 2008 for matching names of various ethnic origins. Each extracted rule carries a weight in [0, 1] expressing the residual edit cost of treating the two forms as equivalent. Unlike single-language algorithms, BMPM:
BMPM supports multiple language branches:
// Initial W → V (German pronunciation)
[id: 2900, name: "w to v initial bm germanic", weight: 0.15, group: bm_germanic]
w -> v / #_;
// EI diphthong
[id: 2901, name: "ei to ai bm germanic", weight: 0.15, group: bm_germanic]
ei -> ai;
// IE combination
[id: 2902, name: "ie to i bm germanic", weight: 0.15, group: bm_germanic]
ie -> i;
// TZ cluster
[id: 2903, name: "tz to ts bm germanic", weight: 0.10, group: bm_germanic]
tz -> ts;
// SCH → ʃ
[id: 2904, name: "sch to sh bm germanic", weight: 0.10, group: bm_germanic]
sch -> ʃ;
// Polish clusters
[id: 3100, name: "szcz bm slavic", weight: 0.10, group: bm_slavic]
szcz -> ʃtʃ;
[id: 3101, name: "cz bm slavic", weight: 0.10, group: bm_slavic]
cz -> tʃ;
[id: 3102, name: "sz bm slavic", weight: 0.10, group: bm_slavic]
sz -> ʃ;
[id: 3103, name: "rz bm slavic", weight: 0.10, group: bm_slavic]
rz -> ʒ;
// Russian patterns
[id: 3110, name: "ogo to ovo bm russian", weight: 0.15, group: bm_russian]
ого -> ovo; // Ivanov pronunciation
// Final devoicing (universal Slavic)
[id: 3120, name: "final b to p bm slavic", weight: 0.10, group: bm_slavic_devoicing]
b -> p / _#;
[id: 3121, name: "final d to t bm slavic", weight: 0.10, group: bm_slavic_devoicing]
d -> t / _#;
[id: 3122, name: "final g to k bm slavic", weight: 0.10, group: bm_slavic_devoicing]
g -> k / _#;
// Digraphs
[id: 3500, name: "cs to ch bm hungarian", weight: 0.10, group: bm_hungarian]
cs -> tʃ;
[id: 3501, name: "gy to dy bm hungarian", weight: 0.10, group: bm_hungarian]
gy -> dʲ;
[id: 3502, name: "ly to y bm hungarian", weight: 0.10, group: bm_hungarian]
ly -> j;
[id: 3503, name: "ny to ny bm hungarian", weight: 0.10, group: bm_hungarian]
ny -> ɲ;
[id: 3504, name: "sz to s bm hungarian", weight: 0.10, group: bm_hungarian]
sz -> s;
[id: 3505, name: "ty to ty bm hungarian", weight: 0.10, group: bm_hungarian]
ty -> tʲ;
[id: 3506, name: "zs to zh bm hungarian", weight: 0.10, group: bm_hungarian]
zs -> ʒ;
// Transliteration variants
[id: 3700, name: "ph to f bm greek", weight: 0.10, group: bm_greek]
ph -> f;
[id: 3701, name: "th to t bm greek", weight: 0.15, group: bm_greek]
th -> t; // Modern Greek pronunciation
[id: 3702, name: "ch to kh bm greek", weight: 0.10, group: bm_greek]
ch -> x;
// Vowel digraphs
[id: 3710, name: "ou to u bm greek", weight: 0.10, group: bm_greek_vowel]
ou -> u;
[id: 3711, name: "ai to e bm greek", weight: 0.15, group: bm_greek_vowel]
ai -> e; // Modern Greek
// Transliteration variants
[id: 3800, name: "ch to kh bm hebrew", weight: 0.10, group: bm_hebrew]
ch -> x; // ח/כ
[id: 3801, name: "kh to kh bm hebrew", weight: 0.10, group: bm_hebrew]
kh -> x;
[id: 3810, name: "tz to ts bm hebrew", weight: 0.10, group: bm_hebrew]
tz -> ts; // צ
[id: 3811, name: "sh to sh bm hebrew", weight: 0.10, group: bm_hebrew]
sh -> ʃ; // ש
BMPM's key insight is that names migrate across languages with predictable transformations:
// -stein → -sztajn
[id: 3150, name: "stein to sztajn cross", weight: 0.15, group: bm_cross]
stein -> ʃtajn / _#;
// -berg → -berk
[id: 3151, name: "berg to berk cross", weight: 0.15, group: bm_cross]
berg -> berk / _#;
// -ov/-ev endings
[id: 3160, name: "ov ending variants", weight: 0.10, group: bm_cross]
ov -> of / _#;
[id: 3161, name: "ev ending variants", weight: 0.10, group: bm_cross]
ev -> ef / _#;
BMPM recognizes common name elements across languages:
// -el (God) - Daniel, Michael, Gabriel
[id: 3200, name: "el theophoric bm", weight: 0.05, group: bm_theophoric]
el -> el / _#;
// -yahu/-yah (YHWH) - Isaiah, Jeremiah
[id: 3201, name: "yahu theophoric bm", weight: 0.10, group: bm_theophoric]
yahu -> ya / _#;
// -ovich/-evich (Russian)
[id: 3210, name: "ovich patronymic bm", weight: 0.05, group: bm_patronymic]
ovich -> ovitʃ / _#;
// -ski/-sky (Polish/Russian)
[id: 3211, name: "ski suffix bm", weight: 0.05, group: bm_patronymic]
ski -> ski / _#;
// -son/-sen (Germanic)
[id: 3212, name: "son patronymic bm", weight: 0.10, group: bm_patronymic]
son -> son / _#;
BMPM's multi-encoding approach maps to LLev through:
The weight system allows:
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |