Срез 3a: горячие папки как у armka_file_worker, нормализатор OCR → statementDocument v1.2 #8

Merged
aep merged 44 commits from feat/6-slice-3a-ocr-normalizer into main 2026-10-07 04:05:00 +03:00
2 changed files with 6 additions and 1 deletions
Showing only changes of commit 746d993077 - Show all commits

View File

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

View File

@ -51,6 +51,11 @@ class TestFixLookalikes:
def test_empty_table_keeps_text(self) -> None:
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(
("raw", "expected"),