add: LayoutProcessor - обработка едениц измерения (кажется все)
This commit is contained in:
@@ -98,16 +98,34 @@ LAYOUT_TEST_CASES = [
|
||||
# --- Единицы измерения (по умолчанию) ---
|
||||
('ru', "Радиус Солнца — около 696.340 км", f"Радиус Солнца{CHAR_NBSP}— около 696.340{CHAR_NBSP}км"),
|
||||
('ru', "5 кг.", f"5{CHAR_NBSP}кг."),
|
||||
('ru', "Доработки проекта стоили 100 тыс. руб.", f"Доработки проекта стоили 100{CHAR_NBSP}тыс.{CHAR_NBSP}руб."),
|
||||
('ru', "Доработки проекта стоили 100 тыс. руб.", f"Доработки проекта стоили 100{CHAR_NBSP}тыс.{CHAR_THIN_SP}руб."),
|
||||
('ru', "№ 5", f"№{CHAR_NBSP}5"),
|
||||
('ru', "Договор № 504/2025А", f"Договор №{CHAR_NBSP}504/2025А"),
|
||||
('ru+en', "Доплата за багаж $ 45.50", f"Доплата за багаж ${CHAR_NBSP}45.50"),
|
||||
('ru+en', "Инвестиции составили $2.5 млн.", f"Инвестиции составили $2.5{CHAR_NBSP}млн."),
|
||||
('ru+en', "Инвестиции составили $ 2.5 млн.", f"Инвестиции составили ${CHAR_NBSP}2.5{CHAR_NBSP}млн."),
|
||||
# Сложные единицы (склеиваются тонкой шпацией, привязываются к числу неразрывным пробелом)
|
||||
('ru', "Дом 120 кв.м. / Участок 6 сот.", f"Дом 120{CHAR_NBSP}кв.м. / Участок 6{CHAR_NBSP}сот."),
|
||||
('ru', "Гробик кладут в ямку 2 кв. м.", f"Гробик кладут в ямку 2 кв. м."),
|
||||
('ru', "500 до н. э.", f"500 до н. э."),
|
||||
('ru+en', "Хаммурапи (1792 - 1750 до н. э.)", f"Хаммурапи (1792 - 1750 до н. э.)"),
|
||||
# ('ru', "Дом 120 кв.м. / Участок 6 сот.", f"Дом 120{CHAR_NBSP}кв.м. / Участок 6{CHAR_NBSP}сот."),
|
||||
# ('ru', "Гробик кладут в ямку 2 кв. м.", f"Гробик кладут в ямку 2 кв. м."),
|
||||
('ru', "IV-X вв.", f"IV-X{CHAR_NBSP}вв."),
|
||||
('ru', "IV в. н. э.", f"IV{CHAR_NBSP}в. н.{CHAR_THIN_SP}э."),
|
||||
('ru+en', "Хаммурапи (1792 - 1750 до н. э.)",
|
||||
f"Хаммурапи (1792 - 1750 до н.{CHAR_THIN_SP}э.)"),
|
||||
|
||||
# Составные и математические единицы
|
||||
('ru', "Площадь 120 кв. м.", f"Площадь 120{CHAR_NBSP}кв.{CHAR_THIN_SP}м."),
|
||||
('ru', "Площадь 130 кв.м.", f"Площадь 130{CHAR_NBSP}кв.{CHAR_THIN_SP}м."),
|
||||
('ru', f"Площадь 140 {CHAR_NBSP} кв.{CHAR_NBSP}м.", f"Площадь 140{CHAR_NBSP}кв.{CHAR_THIN_SP}м."),
|
||||
('ru', "Площадь 150 тыс. кв. км.", f"Площадь 150{CHAR_NBSP}тыс.{CHAR_THIN_SP}кв.{CHAR_THIN_SP}км."),
|
||||
('ru', "Скорость 90 км/ч", f"Скорость 90{CHAR_NBSP}км/ч"),
|
||||
('ru', "Скорость 90 км / ч", f"Скорость 90{CHAR_NBSP}км/ч"),
|
||||
('ru', "В 500 г. н. э.", f"В 500{CHAR_NBSP}г. н.{CHAR_THIN_SP}э."),
|
||||
|
||||
# Сложные единицы (склеиваются тонкой шпацией, привязываются к числу неразрывным пробелом)
|
||||
('ru', "Дом 120 кв.м. / Участок 6 сот.", f"Дом 120{CHAR_NBSP}кв.{CHAR_THIN_SP}м. / Участок 6{CHAR_NBSP}сот."),
|
||||
# ('ru', "Гробик кладут в ямку 2 кв. м.", f"Гробик кладут в ямку 2 кв. м."),
|
||||
('ru', "500 до н. э.", f"500 до н.{CHAR_THIN_SP}э."),
|
||||
('ru+en', "Хаммурапи (1792 - 1750 до н. э.)", f"Хаммурапи (1792 - 1750 до н.{CHAR_THIN_SP}э.)"),
|
||||
|
||||
# --- Комбинированные случаи ---
|
||||
('ru', f"Да — это так{CHAR_HELLIP} а может и нет. Счёт -10.",
|
||||
|
@@ -1,6 +1,7 @@
|
||||
# tests/test_unbreakables.py
|
||||
import pytest
|
||||
from etpgrf import Unbreakables
|
||||
from etpgrf.config import CHAR_NBSP, CHAR_THIN_SP
|
||||
|
||||
|
||||
# Список русских слов, которые должны "приклеиваться" к следующему слову.
|
||||
@@ -26,7 +27,7 @@ def test_russian_prepositions_are_unbreakable(word):
|
||||
# Arrange (подготовка)
|
||||
unbreakables_ru = Unbreakables(langs='ru')
|
||||
input_text = f"Проверка {word} тестирование."
|
||||
expected_text = f"Проверка {word}\u00A0тестирование."
|
||||
expected_text = f"Проверка {word}{CHAR_NBSP}тестирование."
|
||||
# Act (действие, которое выполняем)
|
||||
actual_text = unbreakables_ru.process(input_text)
|
||||
# Assert (утверждение, что результат соответствует ожиданиям)
|
||||
@@ -48,7 +49,7 @@ def test_english_prepositions_are_unbreakable(word):
|
||||
# Arrange (подготовка)
|
||||
unbreakables_en = Unbreakables(langs='en')
|
||||
input_text = f"Training {word} test."
|
||||
expected_text = f"Training {word}\u00A0test."
|
||||
expected_text = f"Training {word}{CHAR_NBSP}test."
|
||||
# Act (действие, которое выполняем)
|
||||
actual_text = unbreakables_en.process(input_text)
|
||||
# Assert (утверждение, что результат соответствует ожиданиям)
|
||||
@@ -63,7 +64,7 @@ def test_mix_prepositions_are_unbreakable():
|
||||
# Arrange (подготовка)
|
||||
unbreakables_mix = Unbreakables(langs='ru+en')
|
||||
input_text = f"Для the Guardian он написал блестящую статью."
|
||||
expected_text = f"Для\u00A0the\u00A0Guardian он\u00A0написал блестящую статью."
|
||||
expected_text = f"Для{CHAR_NBSP}the{CHAR_NBSP}Guardian он{CHAR_NBSP}написал блестящую статью."
|
||||
# Act (действие, которое выполняем)
|
||||
actual_text = unbreakables_mix.process(input_text)
|
||||
# Assert (утверждение, что результат соответствует ожиданиям)
|
||||
@@ -83,8 +84,22 @@ def test_russian_postpositive_particle(word):
|
||||
# Arrange
|
||||
unbreakables_ru = Unbreakables(langs='ru')
|
||||
input_text = f"Отчего {word} не поспать?"
|
||||
expected_text = f"Отчего\u00A0{word} не\u00A0поспать?"
|
||||
expected_text = f"Отчего{CHAR_NBSP}{word} не{CHAR_NBSP}поспать?"
|
||||
# Act
|
||||
actual_text = unbreakables_ru.process(input_text)
|
||||
# Assert
|
||||
assert actual_text == expected_text
|
||||
|
||||
|
||||
# Тесты для проверки особых случаев в Unbreakables
|
||||
UNBREAKABLES_SPECIAL_TEST_CASES = [
|
||||
('ru', "до н.э.", f"до{CHAR_NBSP}н.э."),
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("lang, input_string, expected_output", UNBREAKABLES_SPECIAL_TEST_CASES)
|
||||
def test_layout_processor_with_options(lang, input_string, expected_output):
|
||||
"""Проверяет работу Unbreakables с особыми случаями. """
|
||||
processor = Unbreakables(langs=lang)
|
||||
actual_output = processor.process(input_string)
|
||||
assert actual_output == expected_output
|
||||
|
Reference in New Issue
Block a user