Skip to main content

A simple Python module for parsing human names into their individual components.

Project description

Build Status PyPI PyPI version Documentation

A simple Python (3.2+ & 2.6+) module for parsing human names into their individual components.

  • hn.title

  • hn.first

  • hn.middle

  • hn.last

  • hn.suffix

  • hn.nickname

  • hn.surnames (middle + last)

Supported Name Structures

The supported name structure is generally “Title First Middle Last Suffix”, where all pieces are optional. Comma-separated format like “Last, First” is also supported.

  1. Title Firstname “Nickname” Middle Middle Lastname Suffix

  2. Lastname [Suffix], Title Firstname (Nickname) Middle Middle[,] Suffix [, Suffix]

  3. Title Firstname M Lastname [Suffix], Suffix [Suffix] [, Suffix]

Instantiating the HumanName class with a string splits on commas and then spaces, classifying name parts based on placement in the string and matches against known name pieces like titles and suffixes.

It correctly handles some common conjunctions and special prefixes to last names like “del”. Titles and conjunctions can be chained together to handle complex titles like “Asst Secretary of State”. It can also try to correct capitalization of names that are all upper- or lowercase names.

It attempts the best guess that can be made with a simple, rule-based approach. Its main use case is English and it is not likely to be useful for languages that do not conform to the supported name structure. It’s not perfect, but it gets you pretty far.

Installation

pip install nameparser

If you want to try out the latest code from GitHub you can install with pip using the command below.

pip install -e git+git://github.com/derek73/python-nameparser.git#egg=nameparser

If you need to handle lists of names, check out namesparser, a compliment to this module that handles multiple names in a string.

Quick Start Example

>>> from nameparser import HumanName
>>> name = HumanName("Dr. Juan Q. Xavier de la Vega III (Doc Vega)")
>>> name
<HumanName : [
    title: 'Dr.'
    first: 'Juan'
    middle: 'Q. Xavier'
    last: 'de la Vega'
    suffix: 'III'
    nickname: 'Doc Vega'
]>
>>> name.last
'de la Vega'
>>> name.as_dict()
{'last': 'de la Vega', 'suffix': 'III', 'title': 'Dr.', 'middle': 'Q. Xavier', 'nickname': 'Doc Vega', 'first': 'Juan'}
>>> str(name)
'Dr. Juan Q. Xavier de la Vega III (Doc Vega)'
>>> name.string_format = "{first} {last}"
>>> str(name)
'Juan de la Vega'

The parser does not attempt to correct mistakes in the input. It mostly just splits on white space and puts things in buckets based on their position in the string. This also means the difference between ‘title’ and ‘suffix’ is positional, not semantic. “Dr” is a title when it comes before the name and a suffix when it comes after. (“Pre-nominal” and “post-nominal” would probably be better names.)

>>> name = HumanName("1 & 2, 3 4 5, Mr.")
>>> name
<HumanName : [
    title: ''
    first: '3'
    middle: '4 5'
    last: '1 & 2'
    suffix: 'Mr.'
    nickname: ''
]>

Customization

Your project may need some adjustment for your dataset. You can do this in your own pre- or post-processing, by customizing the configured pre-defined sets of titles, prefixes, etc., or by subclassing the HumanName class. See the full documentation for more information.

Full documentation

Contributing

If you come across name piece that you think should be in the default config, you’re probably right. Start a New Issue and we can get them added.

Please let me know if there are ways this library could be structured to make it easier for you to use in your projects. Read CONTRIBUTING.md for more info on running the tests and contributing to the project.

GitHub Project

https://github.com/derek73/python-nameparser

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

nameparser-1.1.0.tar.gz (35.9 kB view details)

Uploaded Source

Built Distribution

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

nameparser-1.1.0-py2.py3-none-any.whl (24.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file nameparser-1.1.0.tar.gz.

File metadata

  • Download URL: nameparser-1.1.0.tar.gz
  • Upload date:
  • Size: 35.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for nameparser-1.1.0.tar.gz
Algorithm Hash digest
SHA256 bbd4831c72426757ec59674a1aad29c40bf411358a6d6e1cdd68002cbcb90d08
MD5 2ffc34feb141986d4c62c229c4b0db2a
BLAKE2b-256 eda56f83562b1d669c1298cadd05a0197c0d1d994d7d10c8d22c8c944e4c23e7

See more details on using hashes here.

File details

Details for the file nameparser-1.1.0-py2.py3-none-any.whl.

File metadata

  • Download URL: nameparser-1.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for nameparser-1.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4efc7b6d3e77bb399936610f0d67fe64b14a4b7877b8a01ddf34273edd724a1a
MD5 f24d583aebeac6cd02ce049eabebd6e4
BLAKE2b-256 dfef326ca9101560d47954bff7e7c6a90194af5dc1da78e3d61b116bd36b7277

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