What this tool does
Double Metaphone, designed by Lawrence Philips in 2000, is the successor to Metaphone. For each word it returns two phonetic keys — a primary and an alternate — so that names whose pronunciation depends on their language of origin still match. This is the standard choice for serious fuzzy name matching, and it runs entirely in your browser here.
How it works
The algorithm walks the uppercased word, consuming one or more letters at each step and appending symbols to both a primary and a secondary buffer. Most steps append the same symbol to both buffers, but ambiguous letter groups branch:
"W" in a Slavic-looking name -> F on the alternate, dropped on the primary
"CH" mid-word -> X primary, K alternate (Greek/Italian origin)
"GN" after an initial vowel -> KN primary, N alternate
"SCH" -> context-sensitive X / SK
"TH" -> 0 (the "th" sound), with name-origin exceptions
It also tracks a “Slavo-Germanic” flag (triggered by W, K, CZ or WITZ) that changes how Z, J, S and W are treated. Both codes are truncated to four characters. When a word has no ambiguity, the two buffers end up identical.
Matching strategy and examples
Two words are considered a phonetic match if any of their codes coincide. “Smith” yields SM0 and XMT, “Schmidt” yields XMT and XMT — they match on XMT, which is the intended behaviour. “Catherine” gives K0RN and KTRN, capturing both the soft-th and hard-t readings. Use Double Metaphone as the blocking key in record linkage and deduplication pipelines, then apply a finer comparison (edit distance, field-by-field scoring) to the candidate pairs it surfaces. Nothing you enter leaves your browser.
Choosing between Double Metaphone, Metaphone, and Soundex
Three phonetic algorithms are in common use. Understanding what makes each appropriate helps you choose the right one for your task.
Soundex is the oldest (patented 1918, adopted by the US Census) and simplest. It encodes the first letter literally, then maps the remaining consonants into one of six groups and truncates to three digits. For example, “Robert” and “Rupert” both produce R163. Soundex works well for names that are clearly from a single phonetic tradition (mostly Anglo-American names) and is fast and easy to implement. Its limitations appear immediately with names of non-English origin — it encodes “Schmidt” as S253 and “Smith” as S530, which do not match, even though both sound like “Smith” in English.
Metaphone (1990) improves on Soundex by modelling more phonetic rules, including silent letter combinations, vowel elision, and some diphthongs. It encodes consonant sounds rather than mapping consonants into bins. It handles English phonetics well but still struggles with names that have different pronunciations depending on whether they originate from Germanic, Slavic, Romance, or Greek roots.
Double Metaphone handles the multi-origin problem explicitly by returning two codes. When a letter combination has one pronunciation in one language family and another in a different family, it assigns the first pronunciation to the primary code and the second to the alternate. This gives Double Metaphone much better recall across diverse name sets — the Slavic “W-as-F” rule, the Greek “CH-as-K” rule, and the Italian “CI-as-S” rule are all modelled.
For most deduplication and name-search applications where you expect names from mixed origins, Double Metaphone is the correct default. Use Soundex only when you are certain of a narrow Anglo-American name set and need the simplest possible implementation.
Practical use in pipelines
In record linkage and deduplication, Double Metaphone serves as a blocking key — a cheap filter that narrows a large dataset to candidate pairs before applying more expensive comparisons. The pattern is:
- Compute Double Metaphone codes for every name in both datasets.
- Build a lookup table from code to records.
- For each record in dataset A, retrieve all records in dataset B that share any code.
- Apply a finer similarity metric (Jaro-Winkler, edit distance, or field-by-field scoring) only to the candidate pairs.
This avoids O(N²) comparisons across the full dataset while catching phonetically similar names that exact matching would miss entirely. A common choice is to index both the primary and the alternate code so a lookup matches against either.