ng-address-resolver
Resolve free-text Nigerian addresses, such as "back of Fabian Hotel, off NTA Road, Ado Ekiti", to NIPOST digital postcodes (NDAPS). It answers only as precisely as the evidence allows, and asks a question when it cannot.
Status: pre-release. The typed-postcode, location-pin and geocoded paths have run against the live NIPOST API and a live geocoder. The Claude reading step is tested only against a mocked API, and accuracy on real addresses is unmeasured.
How it decides
- A postcode written in the text is extracted (never auto-corrected) and confirmed with NIPOST.
- A location pin is reverse-geocoded by NIPOST. This is the only route to a high-confidence building code.
- Text only is read by Claude into street, landmarks and their relation ("behind", "opposite", "at"), area, LGA and state, then placed with a geocoder and reverse-geocoded by NIPOST.
| Evidence | Answer |
|---|---|
| Typed postcode NIPOST confirms, or a pin within 10 m of a building | Building code, high confidence |
| A pin within 25 m, or the landmark the address is | Building code, medium confidence |
| A building near a landmark ("behind", "opposite") | Area code, e.g. EK-01-A03-FK |
| A street only | District code, low confidence |
| A town only, or nothing found | No code, plus a question for the user |
Text alone rarely identifies a building: a landmark's own building is not the one behind it, and a road's map point is not any house on it. Ask users for a location pin when you need the exact building.
Usage
ng-address "back of Fabian Hotel, off NTA Road, Ado Ekiti"
ng-address "my house" --lat 7.6211 --lng 5.2214
The result is JSON: status (resolved, partial, unresolved), code, level, confidence, method, question and the evidence behind it.
from ng_address import Resolver
result = await Resolver(nipost=..., parser=..., geocoder=...).resolve("...")
The core needs no model. Install ng-address-resolver[claude] to let the CLI and ng_address.parse.ClaudeParser read addresses with Claude. A caller that has already read the address, such as the host model of an MCP server, passes its own ParsedAddress as resolve(..., parsed=...) instead.
Configuration
| Variable | Purpose |
|---|---|
| Anthropic credentials | Needs the claude extra. Read by the Anthropic SDK (ANTHROPIC_API_KEY or an ant auth login profile). Without them the raw text is searched instead. |
NG_POSTCODE_API_KEY |
NIPOST API key. Without it no postcode can be returned. |
NG_GEOCODER_URL |
A Nominatim server, ideally your own. |
NG_GEOCODER_CONTACT |
A URL or email sent in the User-Agent to identify you. Required for the public Nominatim. |
NG_ADDRESS_MODEL |
Claude model. Defaults to claude-opus-5-5. |
The public Nominatim at https://nominatim.openstreetmap.org allows light personal use only. A service whose main job is geocoding must run its own instance or use a commercial geocoder. Map data © OpenStreetMap contributors.
Each address uses at most one Claude call at low effort, up to three geocoder searches, and one or two NIPOST calls.
License
MIT
Metadata
Release files for ng-address-resolver 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ng_address_resolver-0.1.4.tar.gz | 17.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ng_address_resolver-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.0 kB
Release files / ng_address_resolver-0.1.4.tar.gz
| Download URL | ng_address_resolver-0.1.4.tar.gz |
|---|---|
| Size | 17.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d02ae4be622464a3392d04bdce60947300789115b6222c878fc07df4e6993809
|
|
BLAKE2b-256 checksum How to use checksums |
85a65ebcf075234335d4c526e866a6819a6f59ab5b24721a0b3703171c741056
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.
Transparency logRelease files / ng_address_resolver-0.1.4-py3-none-any.whl
| Download URL | ng_address_resolver-0.1.4-py3-none-any.whl |
|---|---|
| Size | 14.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f4b267a6b30574a473708043d910a31d5b50d227ded993b5a644ab0d1e4e0550
|
|
BLAKE2b-256 checksum How to use checksums |
6903289583c91ebd236dea9d30b0c91c11bc3f31a77787e69b79b58f2193c718
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.
Transparency log