Skip to main content

Parse and convert numbers written in French, Spanish, English or Portuguese into their digit representation.

Project description

Documentation Status

text2num is a python package that provides functions and parser classes for:

  • parsing numbers expressed as words in French, English, Spanish and Portuguese and convert them to integer values;
  • detect ordinal, cardinal and decimal numbers in a stream of French, English, Spanish and Portuguese words and get their decimal digit representations. Spanish does not support ordinal numbers yet.


Tested on python 3.7. Requires Python >= 3.6.


This sofware is distributed under the MIT license of which you should have received a copy (see LICENSE file in this repository).


text2num does not depend on any other third party package.

To install text2num in your (virtual) environment:

pip install text2num

That’s all folks!

Usage examples

Parse and convert

French examples:

>>> from text_to_num import text2num
>>> text2num('quatre-vingt-quinze', "fr")

>>> text2num('nonante-cinq', "fr")

>>> text2num('mille neuf cent quatre-vingt dix-neuf', "fr")

>>> text2num('dix-neuf cent quatre-vingt dix-neuf', "fr")

>>> text2num("cinquante et un million cinq cent soixante dix-huit mille trois cent deux", "fr")

>>> text2num('mille mille deux cents', "fr")
ValueError: invalid literal for text2num: 'mille mille deux cent'

English examples:

>>> from text_to_num import text2num

>>> text2num("fifty-one million five hundred seventy-eight thousand three hundred two", "en")

>>> text2num("eighty-one", "en")

Spanish examples:

>>> from text_to_num import text2num
>>> text2num("ochenta y uno", "es")

>>> text2num("nueve mil novecientos noventa y nueve", "es")

>>> text2num("cincuenta y tres millones doscientos cuarenta y tres mil setecientos veinticuatro", "es")

Portuguese examples:

>>> from text_to_num import text2num
>>> text2num("trinta e dois", "pt")

>>> text2num("mil novecentos e seis", "pt")

>>> text2num("vinte e quatro milhões duzentos mil quarenta e sete", "pt")

Find and transcribe

Any numbers, even ordinals.


>>> from text_to_num import alpha2digit
>>> sentence = (
...         "Huit cent quarante-deux pommes, vingt-cinq chiens, mille trois chevaux, "
...         "douze mille six cent quatre-vingt-dix-huit clous.\n"
...         "Quatre-vingt-quinze vaut nonante-cinq. On tolère l'absence de tirets avant les unités : "
...         "soixante seize vaut septante six.\n"
...         "Nombres en série : douze quinze zéro zéro quatre vingt cinquante-deux cent trois cinquante deux "
...         "trente et un.\n"
...         "Ordinaux: cinquième troisième vingt et unième centième mille deux cent trentième.\n"
...         "Décimaux: douze virgule quatre-vingt dix-neuf, cent vingt virgule zéro cinq ; "
...         "mais soixante zéro deux."
...     )
>>> print(alpha2digit(sentence))
842 pommes, 25 chiens, 1003 chevaux, 12698 clous.
95 vaut 95. On tolère l'absence de tirets avant les unités : 76 vaut 76.
Nombres en série : 12 15 004 20 52 103 52 31.
Ordinaux: 5ème 3ème 21ème 100ème 1230ème.
Décimaux: 12,99, 120,05 ; mais 60 02.


>>> from text_to_num import alpha2digit

>>> text = "On May twenty-third, I bought twenty-five cows, twelve chickens and one hundred twenty five point forty kg of potatoes."
>>> alpha2digit(text, "en")
'On May 23rd, I bought 25 cows, 12 chickens and 125.40 kg of potatoes.'

Spanish (ordinals not supported):

>>> from text_to_num import alpha2digit

>>> text = "Compramos veinticinco vacas, doce gallinas y ciento veinticinco coma cuarenta kg de patatas."
>>> alpha2digit(text, "es")
'Compramos 25 vacas, 12 gallinas y 125.40 kg de patatas.'

>>> text = "Tenemos mas veinte grados dentro y menos quince fuera."
>>> alpha2digit(text, "es")
'Tenemos +20 grados dentro y -15 fuera.'


 >>> from text_to_num import alpha2digit

 >>> text = "Comprámos vinte e cinco vacas, doze galinhas e cento vinte e cinco vírgula quarenta kg de batatas."
 >>> alpha2digit(text, "pt")
 'Comprámos 25 vacas, 12 galinhas e 125,40 kg de batatas.'

 >>> text = "Temos mais vinte graus dentro e menos quinze fora."
 >>> alpha2digit(text, "pt")
'Temos +20 graus dentro e -15 fora.'

 >>> text = "Ordinais: quinto, terceiro, vigésimo, vigésimo primeiro, centésimo quarto"
>>> alpha2digit(text, "pt")
'Ordinais: 5º, terceiro, 20ª, 21º, 104º'

Read the complete documentation on ReadTheDocs.

Project details

Download files

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

Files for text2num, version 2.4.0
Filename, size File type Python version Upload date Hashes
Filename, size text2num-2.4.0.tar.gz (20.7 kB) File type Source Python version None Upload date Hashes View

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