【发布时间】:2014-09-01 10:43:28
【问题描述】:
我需要编写一个 Python 程序将字符串文本中的西班牙数字转换为数字:
输入:
'Ciento Veinticuatro Mil Ochocientos Treinta y Cinco'
所需的输出:
124835
我已经编写了一些代码,但我意识到我正在重新发明轮子,只是一个解析器。所以,我需要使用一个词法/语法分析器模块。但我以前从未使用过词法/语法解析器,首先需要编写 BNF 或 PEG 表示法(我还没有决定我将使用哪个解析器模块,我能找到最简单的。)
这对我来说很难,西班牙语的数字语法与英语完全不同。
我的做法:
<numeral> ::= ([<centenas>][<decenas>][<unidades>])+ [<millares>]
我担心这是讲西班牙语的人的问题。
【问题讨论】:
-
我不知道为什么你认为西班牙数字与英文如此不同,它基本上是相同的结构。当然,有数百个融合(性别:quinientas),但这是一个小细节,您的示例代码似乎在正确的轨道上。如果你想要一些复杂的东西,试试爱尔兰语:)
-
@rici 不仅融合的数百人有性别。 21->“veintiuno”,“veintiuna”。一些数字具有三种形式(更多带有重音字符):21->“veintiún”、“veintiun”、“veintiuno”、“veintiuna”。十位和单位之间的连词“y”:35->“treinta”“y”“cinco”。即便如此,西班牙语并不是我的国家(西班牙)最纠结的语言,北方说的是巴斯克语(也称为“Euskera”),它的数字系统是一个疯狂的问题:santurtzieus.com/gelairekia/laguntza/funtzioak/los_numeros.htm
-
Si pues pero no hay problema en reconocer las variantes;独奏 tienes que poner todas en tu léxico。你忽略了
y。 Yo que tu ignoraría los acentos también; mucha gente no les teclean, especialmente si no tienen un teclado adecuado。你坚持 que irlandés es aun peor que vasco。体育quince es "a cúig déag" (a cuíg=5; a deich=10) y 17 es "a seacht déag"。佩罗。 15 天秤座:“cuíg punt déag”。 17 天秤座:“seacht bpunt déag”。 Libra es "punt", pero los números cambian la palabra siguiente: cinco phunt (funt), siete bpunt (bunt, la p es muda acá)。 Y se entremezclan: siete bunt diez。 -
另外,英语也不是那么简单。例如,母语人士 (yo) 会将范围 4050-4100 解读为“介于 4050 和 4100 之间”。请注意,“四百”是完全错误的,而“四千”是可能的,但不常见,除非在强调的情况下:“有四百——我重复一遍,四 千 ——这些……”我不相信西班牙语有这种微妙之处。
-
十亿西班牙语比英语多:)