allo-media / text2num

Parse and convert numbers written in French, English, Spanish, Portuguese, German and Catalan into their digit representation.
https://text2num.readthedocs.io
MIT License
102 stars 47 forks source link

Does not seem to work for troisième #57

Closed ralphmapper closed 3 years ago

ralphmapper commented 3 years ago

We installed text2num and ran the example but it does not work for troisième

We also had to add the 'fr' parameter. It seems the documentation is incorrect

$ python3 test_bugs.py 
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 troisième 21ème 100ème 1230ème.
Décimaux: 12,99, 120,05 ; mais 60 02.
$ cat test_bugs.py 
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,'fr'))
fquirin commented 3 years ago

My French is not the best ^^ but I think troisième is below the default ordinal threshold of 3. Try ordinal_threshold=0. This is new in 2.4.0:

def alpha2digit(
    text: str,
    lang: str,
    relaxed: bool = False,
    signed: bool = True,
    ordinal_threshold: int = 3,
)