---
title: "onecontact docs"
url: https://recursiveai.org/onecontact/docs/
description: "Everything about OneContact 1.0: getting started, phones, email and web addresses, postal addresses country by country, names and companies, extraction…"
version: "1.0.0"
---

# onecontact docs

Everything about OneContact 1.0: getting started, phones, email and web addresses, postal addresses country by country, names and companies, extraction from pages and text, and the model packages that follow in 1.1.

## Start

- [Getting started](https://recursiveai.org/onecontact/docs/getting-started/index.md): Install OneContact 1.0.0 for .NET 10, then validate and format a phone number, check an email address, parse a web address, read a postal address and pull…
- [Overview](https://recursiveai.org/onecontact/docs/overview/index.md): libphonenumber- and libpostal-class contact data for .NET.
- [All notes](https://recursiveai.org/onecontact/docs/docs-map/index.md): Start with the README for the packages, the quick start and the results. Documents about the trained model packages are marked from 1.1. Coming from…
- [Coming from another library](https://recursiveai.org/onecontact/docs/migrating/index.md): Three reads-like tables for people who know the libraries OneContact replaces. Each row names a call or concept from the other library's published…
- [Parse overloads, reasons and JSON](https://recursiveai.org/onecontact/docs/api-shapes/index.md): 

## Phones

- [Phone numbers](https://recursiveai.org/onecontact/docs/phones/index.md): Normative notes for the phone core. Public API: PhoneNumber (value type) and PhoneNumberParser (engine with explicit PhoneMetadata) in…
- [Geocoder, carrier and time zones](https://recursiveai.org/onecontact/docs/phones-geo/index.md): Normative notes for RecursiveAI.OneContact.Phones.Geo: the geocoder, the carrier mapper and the time-zone mapper for phone numbers. The package references…

## Email and web addresses

- [Email addresses](https://recursiveai.org/onecontact/docs/email/index.md): EmailAddress reads one mailbox: an addr-spec (jane@example.com) or a name-addr (Jane Doe ), and gives a canonical form, a versioned key, flags and offsets…
- [Web addresses](https://recursiveai.org/onecontact/docs/web/index.md): WebAddress parses a website address with the WHATWG URL Standard and reports a canonical form, a comparison key, facts and offsets. Everything here is…
- [The Public Suffix List](https://recursiveai.org/onecontact/docs/psl/index.md): RecursiveAI.OneContact.Web.PublicSuffixList answers two questions about a domain name: its public suffix and its registrable domain.
- [Internationalized domain names](https://recursiveai.org/onecontact/docs/idna/index.md): Internationalized host names go through Unicode IDNA Compatibility Processing (UTS #46, non-transitional) the way the URL Standard asks for. Everything is…

## Postal addresses

- [The structural layer, every country](https://recursiveai.org/onecontact/docs/address-structural/index.md): What the library knows about the shape of an address in every country the address data describes: which fields exist, in what order they are written…
- [United States and Canada](https://recursiveai.org/onecontact/docs/address-rules-us-ca/index.md): How a free-text United States or Canadian address is read, standardized and rendered. The code is RuleAddressParser (reading), StreetLineParser (one…
- [France, Benelux, Germany, Austria, Switzerland](https://recursiveai.org/onecontact/docs/address-rules-tier2-a/index.md): How the rule parser (Addresses/Tier2) reads and standardizes these addresses. The rules are data (Addresses/Data/T2/*.tsv) plus one reader; adding a…
- [Britain, Ireland, Iberia, Italy, Malta](https://recursiveai.org/onecontact/docs/address-rules-tier2-b/index.md): How the rule parser (Addresses/Tier2) reads and standardizes these addresses. They are rows in the same tables as the first Tier 2 group…
- [Nordic and Baltic countries](https://recursiveai.org/onecontact/docs/address-rules-tier2-c-north/index.md): How the rule parser (Addresses/Tier2) reads and standardizes these addresses. They are rows in tables of their own (Addresses/Data/T2/*-north.tsv), read…
- [Central Europe, Mexico, Australia](https://recursiveai.org/onecontact/docs/address-rules-tier2-c-south/index.md): How the rule parser (Addresses/Tier2) reads and standardizes these addresses. They are rows in the same tables as the earlier Tier 2 groups…
- [The last line, country by country](https://recursiveai.org/onecontact/docs/address-last-line-orders/index.md): The authorities' sheets print the postcode and the locality in one order per country (docs/address-rules-tier2-*.md). Web pages write other orders. The…
- [When the country can’t be told](https://recursiveai.org/onecontact/docs/address-country-undetermined/index.md): Many postcodes are written alike in several countries: four digits in Belgium, Austria, Switzerland, Liechtenstein, Luxembourg, Denmark, Norway, Slovenia…
- [Expansion dictionaries](https://recursiveai.org/onecontact/docs/address-dictionaries/index.md): The expansion of an address (AddressExpander) and the words of its key use the dictionary files of libpostal (MIT licence), ingested from pinned data…
- [The address key](https://recursiveai.org/onecontact/docs/address-keys/index.md): PostalAddress.Key, GetKey(KeyVersion.V1) and AddressKey.Compute give the key. A published version's output never changes: a rule change ships as a new…

## Names and companies

- [Person names](https://recursiveai.org/onecontact/docs/names/index.md): Rules only. PersonName, NameParsing.Classify/Split/SplitMany and NameHints read a string, give every part with offsets into the input (UTF-16 chars), and…
- [The person key](https://recursiveai.org/onecontact/docs/name-keys/index.md): PersonKey.Compute(PersonName, KeyVersion) and PersonName.Key give the aggressive, versioned comparison key. Canonical forms stay faithful; only the key…
- [Company names and legal forms](https://recursiveai.org/onecontact/docs/company-names/index.md): CompanyName and CompanyNameParser read a company name into: leading article ("The"), base name, legal form (with its ISO 20275 ELF code and a canonical…

## Extraction

- [Extraction from pages and text](https://recursiveai.org/onecontact/docs/extraction/index.md): RecursiveAI.OneContact.Extraction reads the contact information a page states in structured markup, and the contact details in its visible text, and…

## Models (from 1.1)

- [How the models plug in](https://recursiveai.org/onecontact/docs/models/index.md): The Tier 1 + Tier 2 package RecursiveAI.OneContact.Models is described in models-superset.md.
- [The Tier 1 + Tier 2 package](https://recursiveai.org/onecontact/docs/models-superset/index.md): The same design as the Tier 1 package (see models.md): one fast-tier encoder shared by an address-field head, a name-part head, a name-class head and a…
- [The accurate tier](https://recursiveai.org/onecontact/docs/models-accurate/index.md): RecursiveAI.OneContact.Models.Accurate is the opt-in model package for harder text. It carries the same four heads as the fast tier on one frozen encoder…
- [Training data: United States and Canada](https://recursiveai.org/onecontact/docs/training-data-address-us-ca/index.md): How the examples for the address-field head are made, what a line looks like, and what the labels mean. The tool is tools/data/AddressUsCa; where the data…
- [Training data: Tier 2, group A](https://recursiveai.org/onecontact/docs/training-data-address-tier2-a/index.md): How the examples for the address-field head are made for these countries, and what is different from the United States and Canada…
- [Training data: Tier 2, group B](https://recursiveai.org/onecontact/docs/training-data-address-tier2-b/index.md): How the examples for the address-field head are made for these countries. The file format, label names, splits and determinism are those of the other…
- [Training data: Tier 2, group C](https://recursiveai.org/onecontact/docs/training-data-address-tier2-c/index.md): How the examples for the address-field head are made for these countries. File format, label names, splits and determinism are those of…
- [Training data: the challenger model](https://recursiveai.org/onecontact/docs/training-data-address-challenger/index.md): How the examples for a challenger address-field model are made from the OpenStreetMap address file of the published libpostal parser training set. The…

## Inside the library

- [Architecture](https://recursiveai.org/onecontact/docs/architecture/index.md): Normative notes on how the code and its data fit together. Behaviour of each contact kind (key rules, rendering rules, label schemes) gets its own…
- [Tools and data directories](https://recursiveai.org/onecontact/docs/tools-environment/index.md): The scripts and tools under tools/, recipes/ and bench/ keep everything large outside the repository. Each location is an environment variable with a…
- [Changelog](https://recursiveai.org/onecontact/docs/changelog/index.md): All notable changes are recorded here. The format follows Keep a Changelog, and versions follow Semantic Versioning.
