мне нужно написать Python программку для преобразования испанских чисел в строках текста в значные номера:Синтаксические текстовая строка NUM в испанских грамматиках
Вход:
'Ciento Veinticuatro Mil Ochocientos Treinta y Cinco'
Выхода желаемый:
124835
Я написал код, но я понял, что я изобретаю колесо, просто парсер. Поэтому мне нужно использовать модуль лексического/грамматического анализатора. Но я никогда не занимался лексическими/грамматическими анализаторами, и сначала необходимо написать нотацию BNF или PEG (я еще не решил, какой модуль парсера я буду использовать, самый простой, который я могу найти.)
Мне трудно, испанская грамматика для цифр, это так отличается от английского.
Мой подход:
<numeral> ::= ([<centenas>][<decenas>][<unidades>])+ [<millares>]
Я боюсь, что это вопрос для испаноговорящих.
Я не знаю, почему вы думаете, испанские номера настолько отличаются от английских, это в основном та же структура. Конечно, есть сплавленные сотни (с полом: quinientas), но это небольшая деталь, и ваш пример кода, кажется, на правильном пути. Попробуй ирландский, если хочешь чего-то сложного :) – rici
@rici Не только у плавленых сотен есть пол. 21-> «veintiuno», «veintiuna». Некоторое число имеет три формы (более с акцентированным характером): 21 -> «veintiún», «veintiun», «veintiuno», «veintiuna». Сопряжение «y» между десятками и единицами: 35-> «treinta» «y» «cinco». Несмотря на это, испанский язык не самый запутанный язык в моей стране (Испания), на севере - баскский язык (также называемый «Euskera»), его система цифр - сумасшедшая проблема: http://www.santurtzieus.com/ gelairekia/laguntza/funtzioak/los_numeros.htm – Trimax
Si pues pero no hay problema en reconocer las варианты; соло tienes que poner todas en tu léxico. Y ignorar la 'y'. Yo que tu ignoraría los acentos también; mucha gente no les teclean, especialmente si no tienen un teclado adecuado. Y insisto que irlandés es aun peor que vasco. Возможная ошибка айва "a cúig déag" (cuíg = 5; deich = 10) y 17 es "seacht déag". Перо. 15 libras: «cuíg phunt déag». 17 libras: «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. – rici