Как мы все знаем, числа могут быть записаны либо в цифрах, либо названы их именами. Хотя есть много примеров, которые преобразуют 123 в сто двадцать три, я не смог найти хороших примеров того, как преобразовать это наоборот.
Некоторые из предостережений:
- Кардинал / номинал или порядковый номер: «один» и «первый»
- распространенные орфографические ошибки: "сорок" / "сорок"
- сотни / тысячи: 2100 -> «двадцать одна сотня», а также «две тысячи сто»
- разделители: "одиннадцатьсот пятьдесят два", но также "одиннадцатьсот пятьдесят два" или "одиннадцатьсот пятьдесят два" и еще много чего
- разговорные выражения: "тридцать с чем-то"
- дроби: «одна треть», «две пятые»
- общие названия: «дюжина», «половина»
И, возможно, возможно больше предостережений, которые еще не перечислены.
Предположим, что алгоритм должен быть очень надежным и даже понимать орфографические ошибки.
Какие поля / статьи / исследования / алгоритмы я должен прочитать, чтобы научиться писать все это?
Где информация?
PS: Мой последний парсер должен понимать 3 разных языка: английский, русский и иврит. И, возможно, на более позднем этапе будет добавлено больше языков. У иврита также есть мужские / женские номера, например, «один мужчина» и «одна женщина» имеют разные «один» - «эхад» и «ахат». У русских тоже есть свои сложности.
Google отлично справляется с этой задачей. Например:
http://www.google.com/search?q=two+thousand+and+one+hundred+plus+five+dozen+and+four+fifths+in+decimal
(возможно и обратное http://www.google.com/search?q=999999999999+in+english)