Skip to main content

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

  1. A postcode written in the text is extracted (never auto-corrected) and confirmed with NIPOST.
  2. A location pin is reverse-geocoded by NIPOST. This is the only route to a high-confidence building code.
  3. 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.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ng-address-resolver 0.1.3
File Size Uploaded
ng_address_resolver-0.1.3.tar.gz 16.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ng-address-resolver 0.1.3
File Interpreter ABI Platform
ng_address_resolver-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 31.7 kB

Release files / ng_address_resolver-0.1.3.tar.gz

Download URL ng_address_resolver-0.1.3.tar.gz
Size 16.9 kB
Tags Source
SHA-256 checksum
How to use checksums
9e19cda43495bc3fdcef4293a8a1de0a34ad7e1e6075745daa33f3826bf08123
BLAKE2b-256 checksum
How to use checksums
11665452d19fed4696251784216150888ab644ba05a01a7e6d076510f94a70d2
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

Release files / ng_address_resolver-0.1.3-py3-none-any.whl

Download URL ng_address_resolver-0.1.3-py3-none-any.whl
Size 14.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ee589fec26e82e2a99aaf82b9afbcf009fa2adff1db96beb927e2b485ad944a3
BLAKE2b-256 checksum
How to use checksums
167b4f76fd18ad0e4561c9ffdffaaa58d9e1d60f15510fd8eb1bc23fce6330b7
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

Release history Release notifications | RSS feed

0.1.4

2 release files

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page