0

我需要编写一个 Python 程序来将字符串文本中的西班牙数字转换为数字:

输入:

'Ciento Veinticuatro Mil Ochocientos Treinta y Cinco'

所需的输出:

124835

我写了一些代码,但我意识到我正在重新发明轮子,只是一个解析器。所以,我需要使用一个词法/语法分析器模块。但是我以前从未使用过词法/语法解析器,首先需要编写 BNF 或 PEG 表示法(我还没有决定我将使用哪个解析器模块,这是我能找到的最简单的。)

这对我来说很难,西班牙语的数字语法与英语完全不同。

我的做法:

<numeral> ::= ([<centenas>][<decenas>][<unidades>])+ [<millares>]

我担心这是讲西班牙语的人的问题。

4

1 回答 1

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')
于 2014-09-01T11:15:51.503 回答