我需要编写一个Python程序,将字符串文本中的西班牙语数字转换为数字数字:
输入:
'Ciento Veinticuatro Mil Ochocientos Treinta y Cinco'
所需输出:
124835
我写了一些代码,但我意识到我正在重新发明轮子,只是一个解析器。所以,我需要使用lexic / grammar解析器模块。但我以前从未处理过lexic / grammar解析器,首先需要编写BNF或PEG表示法(我还没决定使用哪个解析器模块,这是我能找到的最简单的。)
这对我来说很难,西班牙语的数字语法与英语完全不同。
我的方法:
<numeral> ::= ([<centenas>][<decenas>][<unidades>])+ [<millares>]
我担心这对西班牙人来说是一个问题。
答案 0 :(得分:0)
您可以通过对text2num库进行一些修改来实现此目的:https://github.com/ghewgill/text2num
import re
Small = {
'cinco': 5,
'veinticuatro': 24,
'treinta': 30,
'ciento': 100,
'ochocientos': 800
}
Magnitude = {
'mil': 1000
}
class NumberException(Exception):
def __init__(self, msg):
Exception.__init__(self, msg)
def text2num(s):
a = re.split(r"[\s-]+", s.lower())
n = 0
g = 0
for w in a:
if w == 'y':
continue
x = Small.get(w, None)
if x is not None:
g += x
else:
x = Magnitude.get(w, None)
if x is not None:
n += g * x
g = 0
else:
raise NumberException("Unknown number: "+w)
return n + g
if __name__ == "__main__":
assert 124835 == text2num('Ciento Veinticuatro Mil Ochocientos Treinta y Cinco')