Match Rating Approach
What it is
The Match Rating Approach (MRA) is a phonetic algorithm developed by Western Airlines in 1977 to match passenger names against reservation records. Published by G. B. Moore, it is sometimes called the Western Airlines phonetic algorithm.
What distinguishes MRA from every algorithm in the Soundex/Metaphone family is its architecture. Most phonetic algorithms produce a code and leave matching entirely to you — two codes are either equal or they are not. MRA does two things: it produces a codex (the encoded form of a name), and it defines a comparison procedure that scores two codices on a 0–6 scale and applies a length-dependent threshold to return a boolean pass/fail decision. The algorithm owns the matching step, not the caller.
How it works
Step 1 — Encode to codex
- If the name is 2, 3, or 4 characters long, do not encode; use the name as-is.
- Remove all vowels except a leading vowel (if the name begins with one, keep it).
- Remove duplicate adjacent consonants —
ttbecomest,ckbecomesc, and so on. - If the result is longer than 6 characters, keep the first 3 and last 3 characters and discard the middle.
- Truncate to 6 characters.
Step 2 — Compare two codices
- Compute the absolute difference in length between the two codices. The initial similarity rating is
6 − |length_diff|. - Step through both codices character by character, removing matched characters from subsequent comparisons. Each unmatched character reduces the rating.
- Look up the minimum acceptable rating from the table below, based on the length of the longer of the two original names.
| Longer name length | Minimum rating |
|---|---|
| 1–4 characters | 5 |
| 5–7 characters | 4 |
| 8–11 characters | 3 |
| 12+ characters | 2 |
If the computed rating meets or exceeds the minimum, the comparison returns match; otherwise no match.
Example
"Smith" → codex: SMTH
"Smythe" → codex: SMYTH
Longer name ("Smythe") has 6 characters → min rating: 4
|length_diff| = |4 − 5| = 1 → initial rating: 5
Character comparison finds no further mismatches → final rating: 5
5 ≥ 4 → MATCH
"Catherine" → codex: CTHRN
"Kathryn" → codex: KTHRN
Longer name ("Catherine") has 9 characters → min rating: 3
|length_diff| = |5 − 5| = 0 → initial rating: 6
One unmatched leading character (C vs K) reduces rating → final rating: 5
5 ≥ 3 → MATCH
Variants and history
Moore published MRA in 1977 as an internal solution to a concrete operational problem: airline reservation agents typing names phonetically, inconsistently, and under time pressure. The algorithm predates personal computing and was designed to run on mainframe batch systems.
No widely-used variant exists. MRA has remained largely unchanged since its publication, which partly explains its declining adoption — it was never updated to address its known weaknesses on non-English names.
When to use it
MRA is primarily of historical and academic interest. It appears in NLP and record-linkage literature as a reference point, and in codebases that were written in an era when it was a reasonable choice.
In Python, the jellyfish library exposes both steps directly:
import jellyfish
jellyfish.match_rating_codex("Smith") # → 'SMTH'
jellyfish.match_rating_codex("Smythe") # → 'SMYTH'
jellyfish.match_rating_comparison("Smith", "Smythe") # → True
It is not available in Elasticsearch’s analysis-phonetic plugin, which is a meaningful gap if you are building a search system and want to evaluate phonetic algorithms head-to-head.
Prefer Metaphone or Double Metaphone for general name matching in new systems. MRA’s genuine contribution — the idea that a phonetic algorithm should own its comparison procedure and apply a threshold, rather than treating code equality as the only matching strategy — was ahead of its time and influenced later record-linkage thinking.