Compare
These pages describe what other 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. 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. are built to do, in their own published words, so you can tell which shape of tool your problem wants. Each one ends with a section on when to choose that tool over this one, and each of those sections is written to be taken seriously rather than survived.
What you will not find here is an accuracy comparison. Running someone else's service under terms we did not write, on a query mix we chose, and publishing a score on their behalf is not a measurement we would trust from anyone else. Benchmarks is where numbers live, and every number there is about our own output.
I am evaluating a hosted API
A service you call over HTTPS with no data to download and no index to build. The trade is a per- request relationship, a component vocabularyvocabularyThe fixed set of tokens a tokenizer can produce. Mailwoman's SentencePiece vocabulary is tens of thousands of subword pieces, with byte fallback for anything outside it. that is theirs rather than yours, and a query that leaves your infrastructure.
I am evaluating a self-hosted engine
A geocoder you run, over OpenStreetMapOpenStreetMap (OSM). A community-curated global map database (ODbL-licensed) with addr:* tagged features and place hierarchies. A secondary corpus source and a source of street names. data, with the queries staying on your network. The trade is a provisioning and operations commitment that does not end at install.
I am evaluating the open-source geocoding stack
PeliasPeliasAn open-source geocoder, Mailwoman's spiritual predecessor. and libpostallibpostalAn open-source C address parser used by Pelias. Mailwoman's rule-based v0 and neural classifier supersede it. are the two piecesECE (Expected Calibration Error). A metric that measures how well a model's confidence scores align with its actual accuracy. Lower is better. Mailwoman's held-out ECE drops from 0.067 (raw) to 0.0035 (calibrated). most teams meet when they build a geocoder rather than buy one — a modular search-engine geocoder, and the address parser that a great deal of the field is built on.
The one distinction underneath all three
Two designs answer 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. question, and which one fits depends on what your input looks like rather than on any featurefeatureAn input signal a model conditions on. Beyond the raw tokens, Mailwoman feeds soft features — gazetteer-membership channels and the postcode anchor — that inform predictions without overriding them. table.
A search-engine geocoder indexes every place as a document and ranks your whole string against the index. It is strong on partial input, landmarks, misspellings and search boxes, and it wants the index resident.
A labelcomponent tagOne of the 25 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.-then-look-up geocoder labelscomponent tagOne of the 25 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 spansspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. of your string first — 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., streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels., localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighborhood in the hierarchy., 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. — and then runs one constrained lookup per spanspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree.. It returns a decomposition rather than a match, and the constraint is what lets the reference data stay on disk.
Mailwoman is the second. Nominatim, Photon and PeliasPeliasAn open-source geocoder, Mailwoman's spiritual predecessor. are the first. The two architectures works through what each design is good at and what each one costs, with the published hardware figures and dated citations. Read it before the pages above if you have not settled that question, because it decides more than any of them.
Related
- The landscape — hosted APIs, self-hosted engines, in-process libraries, and the bounded case where a CSV and a regex beat all three.
- Drop-in replacements — the Nominatim-, Photon- and libpostallibpostalAn open-source C address parser used by Pelias. Mailwoman's rule-based v0 and neural classifier supersede it.-compatible endpoints, for keeping a client you already wrote.
- Benchmarks — our measurements, with the scripts that produced them.