The "within-token punctuation" weakness is a misnomer (#375 follow-up)
The failure taxonomy flagged within-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. punctuation as the clearest open neural weakness — apostrophe
81% vs v0 89%, hyphen 81 vs 87, slash 62 vs 72 (2026-06-14-punctuation-stress) — with the root cause
"unmeasured." Measured now (scripts/eval/within-token-punct-diag.ts, neural's actual parseaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. vs gold on
the 61 apostrophe/hyphen/slash rows): the punctuation 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. itself rarely fails. The gap decomposes
into four distinct mechanisms, three of which are already top-priority levers under other names.
What actually fails
| class | rows with ≥1 miss | dominant missed components |
|---|---|---|
| apostrophe | 7/16 | localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. 3, regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. 3, streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. 3 |
| hyphen | 13/23 | streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. 9, house_number 6, localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. 5 |
| slash | 17/22 | house_number 12, localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. 10, regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. 10, unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. 10 |
The apostrophe parsesaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. correctly — O'Connell, O'Fallon, Coeur d'Alene, Martha's Vineyard all
land in the right component. The misses in those rows are elsewhere in the address.
The four real mechanisms
-
The AU/UK slash unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise.-convention (the one new, addressable gap).
4/2A Princes Stis unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. 4 + number 2A;Penthouse 1/2 Pacific Hwyis unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. "Penthouse 1" + number 2. Neural keeps theX/Yglued as onehouse_numberand never splits it. This is the bulk of the slash class's 62% and is a specific, learnable convention (slash between unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. and streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.-number in AU/NZ/UK). -
Comma-less
City STATEsegmentation — the #694 family.North Sydney NSW 2060,Sydney NSW 2000: with no comma, neural keepsNorth Sydney NSWas one localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. and drops the regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.. This is the same delimiter-stripping failure root-caused on #694 (concatenated input loses segmentation) — delimited input fixes it. -
StreetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels./affix boundary wobble — the taxonomy's #1 parser lever.
Country Club RdkeepsRdin 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. (nostreet_suffix); FRRue Jean-Baptiste Lebas/Rue Neuve-des-Capucines 5drop theRueprefix and absorb the 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. into 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.. Pure boundary instabilityboundary instabilityA class of parser errors where the model wobbles on where one address component ends and the next begins — a street suffix swallowed into the street name, a French house number that trails instead of leads. Mailwoman's #1 weakness as of v1.5.0. — nothing to do with the hyphen. -
OOD-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. leading-char drop — the #690 family.
N9W16851(a Wisconsin grid address) parsesaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. to house_number9W16851— the leadingNis dropped, exactly the artifact behind all-capsPALESTINE→ALESTINE(#690). Plus genuine foreign-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.-format gaps: IrishV94 DPF3splits to localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.Limerick V+ 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.94; hyphenated ranges (55-57) mis-split.
Why it matters
The within-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. punctuation gap is not a punctuation-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. problem and does not warrant a punctuation-specific fix. It decomposes into:
- the #694 comma-less/delimiter lever (fixing concatenated-input segmentation — already validated),
- the #1 boundary-instability lever (streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels./affix; the taxonomy's highest-leverage parser fix),
- the #690 OOD-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. family (leading-char drops; foreign 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. formats),
- and one new specific case: the AU/UK slash unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise.-convention (
4/2A).
So three of the four are closed by levers already prioritized — fixing boundary instabilityboundary instabilityA class of parser errors where the model wobbles on where one address component ends and the next begins — a street suffix swallowed into the street name, a French house number that trails instead of leads. Mailwoman's #1 weakness as of v1.5.0. + delimited
input would lift the apostrophe/hyphen classes without touching punctuation. The slash class needs the
AU/UK unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise.-convention specifically (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.-shardshardA partial output file of the corpus build, written in Parquet format. The training pipeline streams shards row by row. or a decode rule for digit/alnum between a unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise.
designatordesignatorThe closed-vocabulary leading word of a secondary-address phrase — 'Apt', 'Suite', 'Floor', 'PO Box', 'Level' — paired with an identifier to form a complete subpremise. and a street 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.). Taxonomy update: re-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. the "within-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. punctuation" row as a
symptom of the boundary-instability + #694 + #690 families, plus the AU/UK slash convention.
Source: scripts/eval/within-token-punct-diag.ts over the apostrophe/hyphen/slash rows of
data/eval/external/punctuation-stress.jsonl.