Skip to main content

Modern, actively maintained fork of num2words optimized for LLM/AI/speech applications.

Project description

https://img.shields.io/pypi/v/num2words2.svg https://github.com/jqueguiner/num2words/workflows/CI/badge.svg https://coveralls.io/repos/github/jqueguiner/num2words/badge.svg?branch=master

num2words2 is a modern, actively maintained fork of the original num2words library that converts numbers like 42 to words like forty-two. It supports multiple languages (see the list below for full list of languages) and can even generate ordinal numbers like forty-second. This fork was created to address the maintenance gap in the original project and optimize for modern AI/LLM/speech applications.

The project is hosted on GitHub. Contributions are welcome.

Installation

The easiest way to install num2words2 is to use pip:

pip install num2words2

Otherwise, you can download the source package and then execute:

python setup.py install

The test suite in this library is new, so it’s rather thin, but it can be run with:

python setup.py test

To run the full CI test suite which includes linting and multiple python environments:

pip install tox
tox

Development Setup

The project uses pre-commit hooks to ensure code quality. To set up your development environment:

# Install pre-commit
pip install pre-commit

# Install the git hook scripts
pre-commit install

# Run hooks on all files (optional, useful for initial setup)
pre-commit run --all-files

This will automatically format and lint your code before each commit using:

  • autopep8 - PEP 8 formatting

  • autoflake - removes unused imports and variables

  • isort - sorts imports

  • flake8 - style and quality checks

  • trailing-whitespace removal

  • end-of-file fixing

Usage

Command line:

$ num2words2 10001
ten thousand and one
$ num2words2 24,120.10
twenty-four thousand, one hundred and twenty point one
$ num2words2 24,120.10 -l es
veinticuatro mil ciento veinte punto uno
$ num2words2 2.14 -l es --to currency
dos euros con catorce céntimos

In code there’s only one function to use:

>>> from num2words2 import num2words
>>> num2words(42)
forty-two
>>> num2words(42, to='ordinal')
forty-second
>>> num2words(42, lang='fr')
quarante-deux

Besides the numerical argument, there are two main optional arguments, to: and lang:

to: The converter to use. Supported values are:

  • cardinal (default)

  • ordinal

  • ordinal_num

  • year

  • currency

lang: The language in which to convert the number. Supported values are:

  • en (English, default)

  • am (Amharic)

  • ar (Arabic)

  • az (Azerbaijani)

  • be (Belarusian)

  • bn (Bangladeshi)

  • ca (Catalan)

  • ce (Chechen)

  • cs (Czech)

  • cy (Welsh)

  • da (Danish)

  • de (German)

  • en_GB (English - Great Britain)

  • en_IN (English - India)

  • en_NG (English - Nigeria)

  • es (Spanish)

  • es_CO (Spanish - Colombia)

  • es_CR (Spanish - Costa Rica)

  • es_GT (Spanish - Guatemala)

  • es_VE (Spanish - Venezuela)

  • eu (EURO)

  • fa (Farsi)

  • fi (Finnish)

  • fr (French)

  • fr_BE (French - Belgium)

  • fr_CH (French - Switzerland)

  • fr_DZ (French - Algeria)

  • he (Hebrew)

  • hi (Hindi)

  • hu (Hungarian)

  • hy (Armenian)

  • id (Indonesian)

  • is (Icelandic)

  • it (Italian)

  • ja (Japanese)

  • kn (Kannada)

  • ko (Korean)

  • kz (Kazakh)

  • mn (Mongolian)

  • lt (Lithuanian)

  • lv (Latvian)

  • nl (Dutch)

  • no (Norwegian)

  • pl (Polish)

  • pt (Portuguese)

  • pt_BR (Portuguese - Brazilian)

  • ro (Romanian)

  • ru (Russian)

  • sl (Slovene)

  • sk (Slovak)

  • sr (Serbian)

  • sv (Swedish)

  • te (Telugu)

  • tet (Tetum)

  • tg (Tajik)

  • tr (Turkish)

  • th (Thai)

  • uk (Ukrainian)

  • vi (Vietnamese)

  • zh (Chinese - Traditional)

  • zh_CN (Chinese - Simplified / Mainland China)

  • zh_TW (Chinese - Traditional / Taiwan)

  • zh_HK (Chinese - Traditional / Hong Kong)

You can supply values like fr_FR; if the country doesn’t exist but the language does, the code will fall back to the base language (i.e. fr). If you supply an unsupported language, NotImplementedError is raised. Therefore, if you want to call num2words with a fallback, you can do:

try:
    return num2words(42, lang=mylang)
except NotImplementedError:
    return num2words(42, lang='en')

Additionally, some converters and languages support other optional arguments that are needed to make the converter useful in practice.

Wiki

For additional information on some localization please check the Wiki. And feel free to propose wiki enhancement.

History

num2words is based on an old library, pynum2word, created by Taro Ogawa in 2003. Unfortunately, the library stopped being maintained and the author can’t be reached. There was another developer, Marius Grigaitis, who in 2011 added Lithuanian support, but didn’t take over maintenance of the project.

Virgil Dupras from Savoir-faire Linux based himself on Marius Grigaitis’ improvements and re-published pynum2word as num2words.

num2words2 Fork

num2words2 is a modern fork of the original num2words library, created to address the maintenance gap and optimize for modern AI/LLM/speech applications. This fork:

  • Provides active maintenance aligned with rapidly evolving AI/ML ecosystem

  • Fixes critical bugs affecting machine learning pipelines

  • Adds enhanced language support for global AI applications

  • Maintains backward compatibility with the original library

Jean-Louis Queguiner

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

num2words2-0.1.0.dev1.tar.gz (396.6 kB view details)

Uploaded Source

Built Distribution

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

num2words2-0.1.0.dev1-py3-none-any.whl (324.1 kB view details)

Uploaded Python 3

File details

Details for the file num2words2-0.1.0.dev1.tar.gz.

File metadata

  • Download URL: num2words2-0.1.0.dev1.tar.gz
  • Upload date:
  • Size: 396.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for num2words2-0.1.0.dev1.tar.gz
Algorithm Hash digest
SHA256 c725a1fdf56c72715cba537c912cd702e7d1a904ae594ac92a516ae4df2cb17c
MD5 ddce6e8473e88dcb89b1a9a29bae9338
BLAKE2b-256 8ffc29b58fdfe253410157980615e101e49e2ec249d8b8e5d263d744df7af9b8

See more details on using hashes here.

File details

Details for the file num2words2-0.1.0.dev1-py3-none-any.whl.

File metadata

File hashes

Hashes for num2words2-0.1.0.dev1-py3-none-any.whl
Algorithm Hash digest
SHA256 2e3ed652df930dfefeaa16a1cda54bdb47d653e2756b5e0e9695e146abe8be3d
MD5 cb230c953ab69dc6106adb1e22116ef4
BLAKE2b-256 3a278ec5eae69924aded44903a84f1c1358051e86eeeec9499a1437b07d3c15f

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