/Word-to-Number-Russian

Проект для перевода чисел, записанных в текстовом виде на русском языке.

Primary LanguagePythonMIT LicenseMIT

Denormalize numbers in Russian

Inverse text normalization for numbers in Russian language. Optimized for ASR task.

Intro

This tool handles complicated denormalization cases such as:

INPUT:  "семьсот миллиардов один рубль, один, два, три три",
RESULT: "700000000001 рубль, 1, 2, 3 3"
INPUT:  "мой телефон девятьсот десять ноль девяносто пять пятьдесят шесть десять",
RESULT: "мой телефон 910 0 95 56 10"
INPUT:  "одна тысяча восемьсот тридцать первый и тысяча девятьсот пятьдесят четвертый",
RESULT: "1831 и 1954"

Mapping

It also can produce mapping for the squashed numbers. This mapping can be further used in the ASR pipeline — e.g., to recalculate the word-level time offsets after the denormalization task.

INPUT:   "семьсот миллиардов один рубль, один, два, три три",
RESULT:  "700000000001 рубль, 1, 2, 3 3"
MASK:    [3, 1, 1, 1, 1, 1]
INPUT:   "мой телефон девятьсот десять ноль девяносто пять пятьдесят шесть десять",
RESULT:  "мой телефон 910 0 95 56 10",
MASK:    [1, 1, 2, 1, 2, 2, 1],
INPUT:   "одна тысяча восемьсот тридцать первый и тысяча девятьсот пятьдесят четвертый",
RESULT:  "1831 и 1954",
MASK:    [5, 1, 4],

Usage

In the following example note that "пятьдесят пять,шестьдесят шесть" are 3 words to squash.

text = "один два, тридцать три, пятьдесят пять,шестьдесят шесть сто двадцать четыре, привет как дела"
extractor = NumberExtractor()

res, mask = extractor.replace(text, apply_regrouping=True)

Result:

TEXT:  "1 2, 33, 55,66 124, привет как дела",
MASK:  [1, 1, 2, 3, 3, 1, 1, 1],