fix(normalizer): замена неразрывного пробела в fix_lookalikes, тест

Исправлена строка 26 в fix_lookalikes: текст.replace("\xa0", " ") для
корректной замены неразрывного пробела (U+00A0) на обычный пробел (U+0020),
как в источнике date_utils._normalize.

Добавлен тест test_nbsp_replacement для проверки замены NBSP с таблицей
двойников и без неё.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
This commit is contained in:
Andrey Epifancev 2026-10-07 00:00:31 +04:00
parent cea8dfe485
commit 746d993077
2 changed files with 6 additions and 1 deletions

View File

@ -23,7 +23,7 @@ _CELL_SEPARATOR_LINE = re.compile(r"[\s\d|•·.:,]*")
def fix_lookalikes(text: str, lookalikes: Mapping[str, str]) -> str: def fix_lookalikes(text: str, lookalikes: Mapping[str, str]) -> str:
"""Буквы-двойники → цифры только вплотную к цифре, в несколько проходов («2ОО5» → «2005»); `|` — разделитель """Буквы-двойники → цифры только вплотную к цифре, в несколько проходов («2ОО5» → «2005»); `|` — разделитель
клеток, если первая строка состоит из цифр, пробелов и пунктуации («2|0|2|4|» → «2 0 2 4 »).""" клеток, если первая строка состоит из цифр, пробелов и пунктуации («2|0|2|4|» → «2 0 2 4 »)."""
text = text.replace(" ", " ") text = text.replace("\xa0", " ")
if _CELL_SEPARATOR_LINE.fullmatch(text.split("\n", 1)[0]): if _CELL_SEPARATOR_LINE.fullmatch(text.split("\n", 1)[0]):
text = text.replace("|", " ") text = text.replace("|", " ")
if not lookalikes: if not lookalikes:

View File

@ -51,6 +51,11 @@ class TestFixLookalikes:
def test_empty_table_keeps_text(self) -> None: def test_empty_table_keeps_text(self) -> None:
assert fix_lookalikes("2ОО5", {}) == "2ОО5" assert fix_lookalikes("2ОО5", {}) == "2ОО5"
def test_nbsp_replacement(self) -> None:
# неразрывный пробел (U+00A0) → обычный пробел (U+0020)
assert fix_lookalikes("31\xa012\xa02024", LOOKALIKES) == "31 12 2024"
assert fix_lookalikes("31\xa012\xa02024", {}) == "31 12 2024"
@pytest.mark.parametrize( @pytest.mark.parametrize(
("raw", "expected"), ("raw", "expected"),