Skip to main content

parse numbers written in natural language

Project description

Supported Python Versions

number-parser is a simple library that allows you to convert numbers written in the natural language to it’s equivalent numeric forms. It currently supports cardinal numbers in the following languages - English, Hindi, Spanish and Russian and ordinal numbers in English.


pip install number-parser

number-parser requires Python 3.6+.


The library provides three major APIs which corresponds to the following common usages.

Interface #1: Multiple numbers

Identifying the numbers in a text string, converting them to corresponding numeric values while ignoring non-numeric words. This also supports ordinal number conversion (for English only).

>>> from number_parser import parse
>>> parse("I have two hats and thirty seven coats")
'I have 2 hats and 37 coats'
>>> parse("One, Two, Three go")
'1, 2, 3 go'
>>> parse("First day of year two thousand")
'1 day of year 2000'

Interface #2: Single number

Converting a single number written in words to it’s corresponding integer.

>>> from number_parser import parse_number
>>> parse_number("two thousand and twenty")
>>> parse_number("not_a_number")

Interface #3: Single number Ordinal

Converting a single ordinal number written in words to it’s corresponding integer. (Support for only English)

>>> from number_parser import parse_ordinal
>>> parse_ordinal("twenty third")
>>> parse_ordinal("seventy fifth")

Language Support

The default language is English, you can pass the language parameter with corresponding locale for other languages. It currently supports cardinal numbers in the following languages - English, Hindi, Spanish and Russian and ordinal numbers in English.

>>> from number_parser import parse, parse_number
>>> parse("Hay tres gallinas y veintitrés patos", language='es')
'Hay 3 gallinas y 23 patos'
>>> parse_number("चौदह लाख बत्तीस हज़ार पाँच सौ चौबीस", language='hi')

Supported cases

The library has extensive tests. Some of the supported cases are described below.

Accurately handling usage of conjunction while forming the number.

>>> parse("doscientos cincuenta y doscientos treinta y uno y doce", language='es')
'250 y 231 y 12'

Handling ambiguous cases without proper separators.

>>> parse("two thousand thousand")
'2000 1000'
>>> parse_number("two thousand two million")

Handling nuances in the languag ith different forms of the same number.

>>> parse_number("пятисот девяноста шести", language='ru')
>>> parse_number("пятистам девяноста шести", language='ru')
>>> parse_number("пятьсот девяносто шесть", language='ru')



0.1.0 (2020-07-30)

Initial release.

0.2.0 (2020-08-18)

Ordinal Number Support

0.2.1 (2020-08-25)

Fix tokenization bug - Hindi

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

number-parser-0.2.1.tar.gz (45.2 kB view hashes)

Uploaded source

Built Distribution

number_parser-0.2.1-py2.py3-none-any.whl (50.9 kB view hashes)

Uploaded py2 py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page