将字符串文本解析为西班牙语语法中的num

2024-10-01 00:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

输入:

'Ciento Veinticuatro Mil Ochocientos Treinta y Cinco'

所需输出:

^{pr2}$

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

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

我的方法:

^{3}$

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


Tags: 模块字符串文本程序解析器语法数字词典
1条回答
网友
1楼 · 发布于 2024-10-01 00:28:00

您可以通过对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')

相关问题 更多 >