#novecientos ---> 900 but only want to take the '9'
#noventa y nueve ---> '99'
number = "novecientos noventa y nueve" # ---> I should concatenate them and it would be this '999'
print(type(number))
#try:
# number = int(number)
#except: #I remove that to see the error message in console
if(1==1):
#Cannot be converted to number directly
#without word2number library for spanish word-numbers from 0 to 1000
#Spanish [0 to 1000]
help_dict = {
'uno':'01','dos':'02','tres':'03','cuatro':'04','cinco':'05','seis':'06','siete':'07','ocho':'08','nueve':'09',
'diez':'10','once':'11','doce':'12','trece':'13','catorce':'14','quince':'15','dieciseis':'16','dieci seis':'16','diecisiete':'17','dieci siete':'17','dieciocho':'18','dieci ocho':'18','diecinueve':'19','dieci nueve':'19',
'veinte':'20', 'veintiuno':'21', 'veinti uno':'21', 'veintidos':'22', 'veinti dos':'22', 'veintitres':'23', 'veinti tres':'23','veinticuatro':'24', 'veinti cuatro':'24', 'veinticinco':'25', 'veinti cinco':'25', 'veintiseis':'26', 'veinti seis':'26','veintisiete':'27','veinti siete':'27','veintiocho':'28','veinti ocho':'28', 'veintinueve':'29', 'veinti nueve':'29',
'treinta':'30', 'treinta y uno':'31', "treintayuno":'31', 'treinta y dos':'32', 'treintaydos':'32','treinta y tres':'33','treinta y tres':'33','treintaytres':'33','treinta y cuatro':'34','treintaycuatro':'34','treinta y cinco':'35','treintaycinco':'35','treinta y seis':'36','treintayseis':'36','treinta y siete':'37','treintaysiete':'37','treinta y ocho':'38','treintayocho':'38','treinta y nueve':'39','treintaynueve':'39',
'cuarente':'40','cuarenta y uno':'41','cuarentayuno':'41','cuarenta y dos':'42','cuarentaydos':'42','cuarenta y tres':'43','cuarentaytres':'43','cuarenta y cuatro':'44','cuarentaycuatro':'44','cuarenta y cinco':'45','cuarentaycinco':'45','cuarenta y seis':'46','cuarenteyseis':'46','cuarenta y siete':'47','cuarentaysiete':'47','cuarenta y ocho':'48','cuarentayocho':'48','cuarenta y nueve':'49','cuarentaynueve':'49',
'cincuenta':'50','cincuenta y uno':'51','cincuentayuno':'51','cincuenta y dos':'52','cincuentaydos':'52','cincuenta y tres':'53','cincuentaytres':'53','cincuenta y cuatro':'54','cincuentaycuatro':'54','cincuenta y cinco':'55','cincuentaycinco':'55','cincuenta y seis':'56','cincuentayseis':'56','cincuenta y siete':'57','cincuentaysiete':'57','cincuenta y ocho':'58','cincuentayocho':'58','cincuenta y nueve':'59','cincuentaynueve':'59',
'sesenta':'60','sesenta y uno':'61','sesentayuno':'61','sesenta y dos':'62','sesentaydos':'62','sesenta y tres':'63','sesentaytres':'63','sesenta y cuatro':'64','sesentaycuatro':'64','sesenta y cinco':'65','sesentaycinco':'65','sesenta y seis':'66','sesentayseis':'66','sesenta y siete':'67','sesentaysiete':'67','sesenta y ocho':'68','sesentayocho':'68','sesenta y nueve':'69','sesentaynueve':'69',
'setenta':'70','setenta y uno':'71','setentayuno':'71','setenta y dos':'72','setentaydos':'72','setenta y tres':'73','setentaytres':'73','setenta y cuatro':'74','setentaycuatro':'74','setenta y cinco':'75','setentaycinco':'75','setenta y seis':'76','setentayseis':'76','setenta y siete':'77','setentaysiete':'77','setenta y ocho':'78','setentayocho':'78','setenta y nueve':'79','setentaynueve':'79',
'ochenta':'80','ochenta y uno':'81','ochentayuno':'81','ochenta y dos':'82','ochentaydos':'82','ochenta y tres':'83','ochentaytres':'83','ochenta y cuatro':'84','ochentaycuatro':'84','ochenta y cinco':'85','ochentaycinco':'85','ochenta y seis':'86','ochentayseis':'86','ochenta y siete':'87','ochentaysiete':'87','ochenta y ocho':'88','ochentayocho':'88','ochenta y nueve':'89','ochentaynueve':'89',
'noventa':'90','noventa y uno':'91','noventayuno':'91','noventa y dos':'92','noventaydos':'92','noventa y tres':'93','noventaytres':'93','noventa y cuatro':'94','noventaycuatro':'94','noventa y cinco':'95','noventaycinco':'95','noventa y seis':'96','noventayseis':'96','noventa y siete':'97','noventaysiete':'97','noventa y ocho':'98','noventayocho':'98','noventa y nueve':'99','noventaynueve':'99',
'cien':'100',
'ciento':'1',
'dos cientos':'2','doscientos':'2',
'tres cientos':'3','trescientos':'3',
'cuatro cientos':'4','cuatrocientos':'4',
'quinientos':'5',
'seis cientos':'6','seiscientos':'6',
'sete cientos':'7','setecientos':'7',
'ocho cientos':'8','ochocientos':'8',
'nove cientos':'9','novecientos':'9',
'mil':'1000',
'cero' : '0'
}
# Convert numeric words to numbers using join() split()
number = ''.join(help_dict[ele] for ele in number.split())
print (number)
number = int(number)
print(type(number))
The error message:
Traceback (most recent call last):
File "C:\Users\PC0\Desktop\P\Python\Number2NumericWord-and-NumericWord2Number\check_if_is_posible_numword2number.py", line 56, in <module>
number = ''.join(help_dict[ele] for ele in number.split())
File "C:\Users\PC0\Desktop\P\Python\Number2NumericWord-and-NumericWord2Number\check_if_is_posible_numword2number.py", line 56, in <genexpr>
number = ''.join(help_dict[ele] for ele in number.split())
KeyError: 'y'
What I need is for the program to concatenate the numbers so that it returns the number '999' as str, and then pass it to int('999')
.
I hope you can help me with this error.
ignore this last sentence, but because the code is so long because the dictionary is so big, I don't what to specify here...
CodePudding user response:
You could define a function that will help to parse the result:
def get_number_from_string(string: str, help_dict: dict) -> int:
splitted_string = string.split()
new_number_list = list()
if "y" in splitted_string:
y_idx = splitted_string.index("y")
str_number = splitted_string[y_idx -1] " " "y" " " splitted_string[y_idx 1]
new_number_list.append(splitted_string[0])
new_number_list.append(str_number)
else:
new_number_list = splitted_string
result = int("".join(help_dict[number] for number in new_number_list))
return result
number = get_number_from_string("novecientos noventa y nueve", help_dict)
>>> 999