Skip to main content

How humans break addresses

Users do not type addresses the way gazetteersgazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. store them. They type what they know, in the order they think of it, with the spellings their keyboard supports, trusting autocomplete suggestions they didn't verify. A parser that only handles well-formed addresses fails on real input.

This article catalogs the failure modes by root cause, not by symptom. None of these are user errors. They are system-design failures. The human provided enough information for a knowledgeable local to find the right place. The parser couldn't because it was designed for addresses, not for people.

I. They use the wrong name for places

Neighborhood as city

What they typeWhat the gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. expects
Brooklyn, NYNew York City
Hollywood, CALos Angeles
SoHo, NYNew York City
Shibuya, JapanTokyo (with Shibuya as ward)

USPS accepts boroughboroughAn administrative or historical division of a city — e.g. the five boroughs of New York City. May be postal, legal, or both, and complicates the locality hierarchy. names as "preferred last line" cities for many New York City ZIP codes. Brooklyn, Queens, Bronx, and Staten Island are all valid mailing cities. But administratively, Brooklyn is a boroughboroughAn administrative or historical division of a city — e.g. the five boroughs of New York City. May be postal, legal, or both, and complicates the locality hierarchy. of New York City, not an independent municipalitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.. Some systemsexpectation-maximizationAn iterative algorithm that estimates model parameters when some variables are unobserved. In Mailwoman's matcher, EM learns the Fellegi-Sunter m and u parameters from unlabeled data — no training labels needed. normalizenormalizeStage 1 of the runtime pipeline: deterministic input preprocessing (Unicode NFC, punctuation normalization, whitespace collapse). Returns a NormalizedInput with an offsetMap that maps normalized positions back to the raw input. Brooklyn, NY → New York, NY. Others preserve the postal localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. exactly. Both choices are valid. Neither is universally correct. The parser has to handle the ambiguity, not resolve it.

Independent city assumed part of larger metro

What they typeWhat they mean
Cambridge → BostonCambridge is a separate citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. in a different county
Santa Monica → Los AngelesSanta Monica is an independent citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.
Jersey City → New YorkDifferent stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality., different citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.
Oakland → San FranciscoSeparated by a bay and a century of rivalry

The human typed what they think of as "the metro area." The gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. disagrees. A well-trained parser will place Cambridge in Middlesex County, MA. A human would say "close enough — it's right across the river." Which answer is correct depends on whether the use case is delivery routing or statistical aggregation. The parser cannot know the use case from the input alone.

Colloquial vs. official names

ColloquialOfficial
SaigonHo Chi Minh City
BombayMumbai
PekingBeijing
KievKyiv

Both names in each pair are legitimate, used by millions; the speaker's choice between them often carries political or generational weightparameterA single learned number inside a model — one weight or bias. Mailwoman's encoder has roughly 30 million of them; training is the search for good values.. A parser that rejects Bombay is rejecting real usage. A parser that silently converts Bombay → Mumbai is making a political choice the user didn't ask for. The correct behavior is to recognize both and surface the ambiguity.

Postal city ≠ municipal city

USPS uses delivery names that often differ from municipal boundaries:

USPS mailing citypostal cityThe city name the postal service uses for a ZIP, which can differ from the legal municipality a resident lives in — e.g. many suburbs share a larger city's postal name. A source of locality ambiguity.Actual municipalitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.
Los Angeles, CA 90210Beverly Hills
Los Angeles, CA 90069West Hollywood
Miami, FL 33122Doral
Miami, FL 33134Coral Gables

USPS assigns mailing citypostal cityThe city name the postal service uses for a ZIP, which can differ from the legal municipality a resident lives in — e.g. many suburbs share a larger city's postal name. A source of locality ambiguity. names for carrier-route efficiency, not for geographic correctness. The same physical building can have a mailing address in "Los Angeles" and a legal address in "Beverly Hills." Both are legitimate. The parser's job is to recognize the distinction, not to pick one.

II. They put things in the wrong order

Postcode before locality

75008 Paris ← French format (postcode first)
Paris 75008 ← Anglophone format (locality first)

Both describe the same place. A parser trained exclusively on US-formatted addresses (number → streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one.) will mislabel the postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. as a house numberhouse numberThe numeric or alphanumeric identifier of a building on a street. Mailwoman's house_number component; its position relative to the street name flips between locales. and fail on the localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. entirely. The ordering assumption is a trainingtrainingThe process of adjusting a model's parameters so its predictions match labeled examples, by repeatedly measuring error and nudging the weights to reduce it. Distinct from inference, when the trained model is run on new input.-data bias, not a structural requirement of addresses.

Building number after street (non-Anglophone)

République 12 ← French/European format
12 Rue de la République ← Anglophone reordered

Many European addressing systemsexpectation-maximizationAn iterative algorithm that estimates model parameters when some variables are unobserved. In Mailwoman's matcher, EM learns the Fellegi-Sunter m and u parameters from unlabeled data — no training labels needed. place the building number after the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. name. German, Dutch, and Scandinavian addresses do the same. A parser that expects number-first will split République from 12 and tag them independently, missing the phrase boundary.

Administrative before local

Île-de-France Paris ← Administrative hierarchy, descending
Paris, Île-de-France ← Local-to-administrative, ascending

Aggregators and government databases sometimes emit administrative hierarchy in decreasing granularity (regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.). A parser expecting local-to-administrative order will see a regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. where it expected a localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. and fail the classification.

III. They spell things wrong

Transposition

IntendedTyped
PotsdamPostdam
BoulevardBoulvard
PittsburghPittsburg

Adjacent-character swaps are the most common typing error for English-language addresses. They are especially damaging for gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. lookups because the misspelling produces no match, not a near match — the string differs by edit distanceedit distanceThe minimum number of single-character insertions, deletions, or substitutions needed to turn one string into another (Levenshtein distance). Used in corpus alignment and record matching. 1 but shares no substring index entry.

Phonetic substitution

IntendedTyped
FillmorePhilmore
CamarilloCamarillo
PeachtreePeachtree

The human sounds out the word and types what they hear. These errors are especially common for place namestoponymA proper name for a geographic place. in languages the speaker does not speak: a non-French speaker typing Versailles from memory might produce Versai, Versaille, or Versales.

Missing diacritics

IntendedTyped
MontréalMontreal
ZürichZurich
São PauloSao Paulo

The human's keyboard does not have the character. Or the form field stripped it. Or the database that stored it normalized to ASCII. The parser must handle both forms. A system that treats Montreal and Montréal as different cities is wrong even when both rows exist in different source databases.

Script confusion

Москва, ул. Тверская 12 ← Entirely in Cyrillic
Moscow, 12 Tverskaya St ← Transliterated
Moscow, ул. Тверская 12 ← Mixed — English city, Cyrillic street

The mixed-script case is the hardest: the human typed the citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. in the script they know (English) and the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. in the script they received (Cyrillic, copied from a local source). A tokenizertokenizerThe component that converts a raw address string into a sequence of numeric token IDs the model can process. Mailwoman's tokenizer is a SentencePiece unigram model trained specifically on postal addresses. that treats non-Latin scripts as opaque byte sequences will produce garbage for the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. while correctly recognizing the citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.. The parser fails silently on half the address.

IV. They make structural assumptions the parser doesn't share

Administrative hierarchy confusion

What they typeWhat they meanWhat the parser thinks
WashingtonWashington, DCWashington stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.? George Washington University?
ParisParis, FranceParis, Texas? Paris, Ontario?
QuebecProvinceregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. of QuebecQuebec City?
MexicoMexico (the countrycountryThe top-level address component (an ISO country). Closed-vocabulary, so it is best handled by a deterministic matcher feeding a proposal rather than a retrained model head.)Mexico City?

The human assumes context the parser doesn't have. The human means "the Washington everyone knows" — the capital, not the stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality., not the university. The parser has to guess from statistical priors. The correct answer is "it depends on what the rest of the address says, and sometimes you need to ask."

Crossing metro areas / border cities

AddressProblem
Kansas City, KS vs Kansas City, MOSame name, different statesregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality., separated by a river
Basel addresses near France/Germany borderSame citylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy., three countries' postal systemsexpectation-maximizationAn iterative algorithm that estimates model parameters when some variables are unobserved. In Mailwoman's matcher, EM learns the Fellegi-Sunter m and u parameters from unlabeled data — no training labels needed.
"Washington metro" addresses in Virginia/MarylandMetro area crosses stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. lines

The human knows which Kansas City they meant. The parser sees a name that resolves to two different places with equal name-matching confidence. A population-weighted tiebreak picks Kansas City, MO (larger). That's wrong if the user meant Kansas City, KS. The correct behavior is to say "there are two" and let the downstream system resolve.

Duplicate street names across municipalities

123 Main St, Springfield

Springfield exists in 34 US statesregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.. Main Street exists in most of them. Without a stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality., the parser has no way to know which Springfield the human meant. With a stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. but no ZIP, the parser can narrow to one stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. but still has streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. deduplicationrecord matchingThe process of determining whether two database records refer to the same real-world entity. Mailwoman's matcher uses a geocode-first approach (match the resolved place, not the address string) with Fellegi-Sunter probabilistic scoring. across towns within the stateregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality..

Missing unit or apartment

123 Main St ← typed
123 Main St, Apt 4B ← actual delivery point

The building at 123 Main Street contains 20 apartments. The human omitted the unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. number. A geocoder that resolves to the building rooftoprooftopGeocoding precision at the building or parcel level — coordinates within a few metres — the highest tier of the geocode cascade. Sourced from address-point and situs data. will place the result at the building entrance — correct for the building, wrong for the apartment. A delivery driver needs the unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. number. A statistical analysis might not. The parser cannot know which.

V. They trust systems that lie to them

ZIP code centroid as exact address

A ZIP code is a delivery route, not a point. But many mapping services return a centroid when given only a ZIP code — and labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. it "the address." The human copies the coordinates. The parser now has what looks like a high-confidence geocode that is a ZIP-level approximation, off by up to several miles.

This is an input-quality problem, not a parser problem, but the parser is the first system that can detect it: if the input is 90210 and nothing else, the parser should return postcode=90210 at high confidence and locality at low confidence — not locality=Beverly Hills at high confidence inferred from the postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one..

Autocomplete contamination

The human typed Spring and clicked the first suggestion. It was Springfield, IL 62701. They meant Springfield, MA 01103. The autocomplete system returned the most-popular Springfield (IL has higher query volume). The human trusted it without verifying. The parser receives Springfield, IL 62701 — a fully-specified address — and has no signal that it's wrong.

This failure class is outside the parser's reach. It lives in the UI layerlayerOne transformer block — attention plus a feed-forward network, with normalization and residual connections — applied to every position. Stacking layers lets the model build up richer representations; Mailwoman's encoder has 6.: autocomplete should show "did you mean Springfield, MA?" when the user's location context suggests a different Springfield. The parser's contribution is making those alternatives available.

What this means for a parser

The failure taxonomy converges on one principle: the parser should surface ambiguity instead of guessing through it. Every failure above is a case where the human provided enough information for a knowledgeable local to find the right place, but the parser returned a single confident answer that was wrong.

The correct design response is to make the parser report what it cannot decide, not to make it smarter:

  • Return candidates, not a single answer.
  • Surface ambiguity when multiple equally-valid interpretations exist.
  • Distinguish "I'm confident this is a localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy." from "I'm confident this localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. resolves to this WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations. ID."
  • Let the downstream system decide how much ambiguity it can tolerate.

The postal system already works this way. The Remote Encoding Center operator sees an ambiguous address and keys in their best guess. The carrier sees the guess and corrects it with local knowledge. The parser is the first link in that chain — its job is to give the next link enough information to decide.

See also

  • How mail delivery actually works — the system these addresses enter
  • Addresses that break geocoders — concrete failure examples from the geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available. literature
  • The database fallacy — why there is no perfect reference set that fixes these problemsexpectation-maximizationAn iterative algorithm that estimates model parameters when some variables are unobserved. In Mailwoman's matcher, EM learns the Fellegi-Sunter m and u parameters from unlabeled data — no training labels needed.
  • Falsehoods about addresses — the falsehoods catalogue, organized by category