1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3# Скрипт для проверки предварительной обработки текста
4#
5# Сюда можно добавить определённым образом сформированные строки
6# с известным результатом, например: "в 2000 г." -> "в двухтысячном году."
7# Для проверки не сломалось ли чего после внесения изменений в templates.py.
8
9from preprocessing.text_prepare import text_prepare
10
11# набор фраз для проверки
12test_txt=[
13    # проверка шаблонов presamples
14    ('Указанный ID используется', 'Указанный ай-ди используется.'),
15    ('(см. главу 2)', '(смотри главу 2).'),
16    ('I am', 'I am.'),
17    ('МГТУ им. Н.Э. Баумана', 'МГТУ имени Н.Э. Баумана.'),
18    ('градусов с.ш.', 'градусов северной широты.'),
19    ('2 чел.', '2 человека.'),          # TODO нужно дополнить
20    ('10 USD', '10 долларов США.'),
21    ('$10', '10 долларов.'),
22    ('принимаются €', 'принимаются евро.'),
23    ('10,3 млн', '10 целых 3 десятых миллиона.'),
24    ('I кв.', 'первый квартал.'),
25    ('кв. 10', 'квартира 10.'),
26    ('д. 10', 'дом 10.'),
27    ('ул. 10', 'улица 10.'),
28    ('пр-т', 'проспект.'),
29    ('Тверская обл.', 'Тверская область.'),
30    ('Московской обл.', 'Московской области.'),
31    # Единицы измерения
32    ('диаметром в 2 см', 'диаметром в два сантиметра.'),
33    ('С 5 см до листа', 'С пяти сантиметров до листа.'),
34    ('от 1 до 4 км', 'от одного до четырёх километров.'),
35    ('около 20 м', 'около двадцати метров.'),
36    ('в течение 21 сек', 'в течение двадцати одной секунды.'),
37    ('порядка 10 шт.', 'порядка десяти штук.'),
38    ('вес равен 65 кг', 'вес равен шестидесяти пяти килограммам.'),
39    ('в 50 ₽', 'в пятидесяти рублях.'),
40    ('4,5 км', '4 целых 5 десятых километра.'),
41    ('18 МВт', '18 мегаватт.'),
42    ('11 миллионов руб.', '11 миллионов рублей.'),
43    ('тысяча шт.', 'тысяча штук.'),
44    # Десятичные дроби
45    ('1 234,345 567', '1234 целых 345567 миллионных.'),
46    ('по сравнению с 10,5 кг', 'по сравнению с десятью целыми пятью десятыми килограмма.'),
47    ('более 2,55 м', 'более двух целых пятидесяти пяти сотых метра.'),
48    ('для 2,4 кВт', 'для двух целых четырёх десятых киловатта.'),
49    ('равно 3,4 мм', 'равно трём целым четырём десятым миллиметра.'),
50    ('при 3,5 тысячах', 'при трёх целых пяти десятых тысячах.'),
51    # Римские цифры
52    ('в XX веке', 'в двадцатом веке.'),
53    #('CM', '900.'),
54    #('XCIX', '99.'),
55    # TODO нужно доделать дальнейшую проверку
56    # проверка шаблонов samples
57    ('220V', '220 вольт.'),
58    ('2000 г.', 'двухтысячный год.'),
59    ('2000 гг.', 'двухтысячные годы.'),
60    ('2000-й г.', 'двухтысячный год.'),
61    ('в 2000 г.', 'в двухтысячном году.'),
62    ('в 2000 гг.', 'в двухтысячных годах.'),
63    ('в 2000-х гг.', 'в двухтысячных годах.'),
64    ('в 20 в.', 'в двадцатом веке.'),
65    ('1 царя', 'одного царя.'),
66    # Порядковые числительные
67    # Склонение порядковых числительных при именах собственных
68    ('Петр I', 'Петр первый.'),
69    ('Фёдор I', 'Фёдор первый.'),
70    ('Екатерина II', 'Екатерина вторая.'),
71    ('при Николае II', 'при Николае втором.')
72    # Время
73    # Количественные числительные
74    # Буквы греческого алфавита
75    ]
76
77count_err = 0    # счётчик непройдённых проверок
78
79for txt in test_txt:
80    text = text_prepare(txt[0])
81    if text != txt[1]:
82        print('ВНИМАНИЕ! неверное преобразование: "'+txt[0]+'" -> "'+text+'"'+'                 должно быть: "'+txt[1]+'"')
83        count_err += 1
84
85print('\nПройдено проверок: ' + str(len(test_txt)-count_err) + ' из ' + str(len(test_txt)) + '\n')
86
87# дальше предлагается ввести текст вручную для проверки
88txt = input('Введите текст:\n')
89
90text = text_prepare(txt)
91
92print('Обработанный текст:\n'+text)
93