Skip to main content

Person name normalization: strip titles, suffixes, resolve nicknames to canonical forms

Project description

corp-names

Person name normalization library. Strips titles, suffixes, middle initials, and resolves nicknames to canonical forms. Includes 15,000+ name entries covering English nicknames, international variants, and CJK/Arabic/Japanese/Korean names.

Installation

pip install corp-names

Usage

from corp_names import normalize_name

result = normalize_name("Dr. Bob Smith Jr.")
print(result.normalized)  # "robert smith"
print(result.first)       # "robert"
print(result.last)        # "smith"
print(result.prefix)      # "dr"
print(result.suffix)      # "jr"

International name resolution

normalize_name("Guillaume de la Fontaine").normalized  # "william de la fontaine"
normalize_name("Prof. Klaus Müller").normalized         # "nicholas muller"
normalize_name("Giuseppe Rossi").normalized             # "joseph rossi"

Name lookup API

from corp_names import is_known_name, get_name_category

is_known_name("bob")          # True (nickname)
is_known_name("robert")       # True (canonical)
is_known_name("hiroshi")      # True (japanese)

get_name_category("bob")      # "common"
get_name_category("guillaume") # "international"
get_name_category("hiroshi")  # "japanese"

CLI

corp-names normalize "Dr. Bob Smith Jr."
# Original:   Dr. Bob Smith Jr.
# Normalized: robert smith
# First:      robert
# Last:       smith
# Prefix:     dr
# Suffix:     jr
# Nickname:   resolved to canonical form

corp-names normalize "Sir William H. Gates III" --json

Normalization Pipeline

  1. Unicode normalize (unidecode for accented characters)
  2. Strip punctuation (remove periods, commas; preserve hyphens)
  3. Tokenize by whitespace
  4. Strip prefixes (titles, honorifics)
  5. Strip suffixes (generational, credentials)
  6. Remove middle initials (single-letter tokens)
  7. Resolve nicknames to canonical forms
  8. Build normalized lowercase output

NormalizedName Model

class NormalizedName(BaseModel):
    original: str            # Original input
    normalized: str          # Full normalized lowercase name
    first: str               # First/given name (after nickname resolution)
    last: str                # Last/family name
    prefix: str              # Detected prefix(es), e.g. "dr"
    suffix: str              # Detected suffix(es), e.g. "jr"
    nickname_resolved: bool  # Whether first name was a nickname

Data

All name data is stored in nicknames.json with categorized entries:

  • Nickname mappings (~1,350): resolve informal/international names to canonical forms
    • common: English nicknames (bob→robert, liz→elizabeth)
    • international: cross-language variants (guillaume→william, giuseppe→joseph)
    • archaic: historical nicknames (elsa→elizabeth, fanny→frances)
  • Standalone canonical names (~13,800): known first names with no mapping needed
    • canonical: Western names (mark, laura, emma, scott)
    • cjk: Chinese names (li, wang, zhang)
    • japanese: Japanese names (hiroshi, takashi, akira)
    • korean: Korean names (kim, park, choi)
    • arabic: Arabic/Islamic names (ali, omar, mustafa)
    • french_compound: French compound names (jean-pierre, marie-claire)
  • Prefixes: ~150 titles and honorifics (military, religious, nobility, academic, political)
  • Suffixes: ~600 credentials, generational markers, and honors (PhD, Jr, III, OBE, CPA)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

corp_names-0.2.0.tar.gz (83.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

corp_names-0.2.0-py3-none-any.whl (76.9 kB view details)

Uploaded Python 3

File details

Details for the file corp_names-0.2.0.tar.gz.

File metadata

  • Download URL: corp_names-0.2.0.tar.gz
  • Upload date:
  • Size: 83.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.14

File hashes

Hashes for corp_names-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7cf2896b40677d29fe053747779673c035d045c5eb20292dd00a0061c6966f67
MD5 dfe2f06d0c3cb8e778c755206773064b
BLAKE2b-256 11153de276acee27338b03359defa46f191306ce9ee86f41b0933619bea820bc

See more details on using hashes here.

File details

Details for the file corp_names-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: corp_names-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 76.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.14

File hashes

Hashes for corp_names-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ed4c91a9c9e46885138aac58048ca8e4f196692f7ab6708a882c7f771b25ee6
MD5 091af3a9cee792536967ec801cb1fecd
BLAKE2b-256 14a2f09530717f5f5c7c85b764e877807149a6d2090e6cca9a6c8e01446056e0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page