Преобразовать числа записанные прописью в их десятичный аналог: «три» -> 3

264 просмотра
0
0 Комментариев

Можно ли как-нибудь сделать так, чтобы определить такое:

Сколько будет три плюс 2?

Можно ли как-нибудь из «три» сделать 3?

P.S Вместо «три» может быть и «3», «десять», «10», короче, любое число.


Добавить комментарий

1 Ответы

Python Опубликовано 14.12.2018
0

Предложу такой код, который использую сам, но он не работает с окончаниями вроде тысяча и семь тысяч Вариативность русского языка однако. Взят был c английского SO

def text2int(textnum, numwords={}):
    if not numwords:
      units = [
        "ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь",
        "девять", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать",
        "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать",
      ]
      tens = ["", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"]
      scales = ["сто", "тысяч", "миллион", "миллиард", "триллион"]
      numwords["и"] = (1, 0)
      for idx, word in enumerate(units):    numwords[word] = (1, idx)
      for idx, word in enumerate(tens):     numwords[word] = (1, idx * 10)
      for idx, word in enumerate(scales):   numwords[word] = (10 ** (idx * 3 or 2), 0)
    current = result = 0
    for word in textnum.split():
        if word not in numwords:
          raise Exception("Неверное слово: " + word)
        scale, increment = numwords[word]
        current = current * scale + increment
        if scale > 100:
            result += current
            current = 0
    return result + current
print text2int("семьдесят тысяч пятьдесят три")
>>>70053

[/apcode]

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up