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 に答える