[tradein] dedup: avito house-no regex хватает цифры из приклеенного названия метро вместо реального номера дома #2423

Closed
opened 2026-07-04 13:20:02 +00:00 by lekss361 · 1 comment
Owner

Найдено при live-перезамере #2291 (PR #2417, post-deploy verification, 2026-07-04) — отдельный, ранее неучтённый класс остаточных кросс-сорс дублей (~244 из 434 survivor-групп на текущем денаминаторе, часть требует ручной классификации, точное число не chистое).

Баг

Некоторые avito-адреса приклеивают название ближайшей станции метро к номеру дома БЕЗ разделителя, например:

ул. Амундсена, 2Чкаловская11-15 мин...

_DEDUP_HOUSE_NO_RE (tradein-mvp/backend/app/services/estimator.py, рядом с _parse_street_house) выхватывает "15" (из хвоста "11-15 мин" — расстояние до метро пешком) вместо реального номера дома "2".

Дальше в _dedup_cross_source (:5159) guard_house (защита от объединения РАЗНЫХ домов на одной улице) блокирует street-union между этим avito-листингом и cian/domklik/yandex-версиями того же физлота, потому что house-no не совпадает (хотя название улицы совпадает 1-в-1) — легитимный дубль не схлопывается.

Как нашли

Post-deploy live-перезамер #2291: pre/post-fix сравнение на 4764 реальных candidate-группах дало 434 survivors; точечная классификация showed 244 из них — оба адреса парсятся (не class 2 "непарсибельно"), но house-no токены расходятся из-за этого паттерна.

Scope (черновой, требует уточнения при взятии в работу)

  • Разделитель нужен ДО номера дома в avito-адресах, где за номером сразу следует кириллическое название метро без пробела/запятой — _DEDUP_HOUSE_NO_RE нужно ужесточить (например, требовать что после найденной группы цифр либо конец строки, либо не-буквенный разделитель, либо явно резать по первому кириллическому слову, идущему сразу за цифрами без пробела).
  • Осторожно: не сломать существующие house-no паттерны с буквенным литерным суффиксом («24Г», «32А» и т.п.) — те цифры+буква ДОЛЖНЫ матчиться как единый house-no, а не резаться.
  • Нужны adversarial regression-тесты по образцу #2291 fixup (deep-review нашёл over-merge риск в прошлый раз — здесь риск противоположный, under-merge, но тоже нужна проверка на смежных кейсах).

Риск

Средний — трогает тот же house-no regex, что используется во всех источниках (не только avito), нужна широкая regression-проверка перед мержем.

Refs #2291, #2417

Найдено при live-перезамере #2291 (PR #2417, post-deploy verification, 2026-07-04) — отдельный, ранее неучтённый класс остаточных кросс-сорс дублей (~244 из 434 survivor-групп на текущем денаминаторе, часть требует ручной классификации, точное число не chистое). ## Баг Некоторые avito-адреса приклеивают название ближайшей станции метро к номеру дома БЕЗ разделителя, например: ``` ул. Амундсена, 2Чкаловская11-15 мин... ``` `_DEDUP_HOUSE_NO_RE` (`tradein-mvp/backend/app/services/estimator.py`, рядом с `_parse_street_house`) выхватывает **"15"** (из хвоста "11-15 мин" — расстояние до метро пешком) вместо реального номера дома **"2"**. Дальше в `_dedup_cross_source` (`:5159`) `guard_house` (защита от объединения РАЗНЫХ домов на одной улице) блокирует street-union между этим avito-листингом и cian/domklik/yandex-версиями того же физлота, потому что house-no не совпадает (хотя название улицы совпадает 1-в-1) — легитимный дубль не схлопывается. ## Как нашли Post-deploy live-перезамер #2291: pre/post-fix сравнение на 4764 реальных candidate-группах дало 434 survivors; точечная классификация showed 244 из них — оба адреса парсятся (не class 2 "непарсибельно"), но house-no токены расходятся из-за этого паттерна. ## Scope (черновой, требует уточнения при взятии в работу) - Разделитель нужен ДО номера дома в avito-адресах, где за номером сразу следует кириллическое название метро без пробела/запятой — `_DEDUP_HOUSE_NO_RE` нужно ужесточить (например, требовать что после найденной группы цифр либо конец строки, либо не-буквенный разделитель, либо явно резать по первому кириллическому слову, идущему сразу за цифрами без пробела). - Осторожно: не сломать существующие house-no паттерны с буквенным литерным суффиксом («24Г», «32А» и т.п.) — те цифры+буква ДОЛЖНЫ матчиться как единый house-no, а не резаться. - Нужны adversarial regression-тесты по образцу #2291 fixup (deep-review нашёл over-merge риск в прошлый раз — здесь риск противоположный, under-merge, но тоже нужна проверка на смежных кейсах). ## Риск Средний — трогает тот же house-no regex, что используется во всех источниках (не только avito), нужна широкая regression-проверка перед мержем. Refs #2291, #2417
Author
Owner

Закрыто PR #2429 (merge 752c3656, задеплоено 2026-07-04). Живая проверка на реальных адресах из прода подтверждает: «ул. Амундсена, 2Чкаловская11-15 мин. пешком» → house="2" (не «15»), «ул. Щербакова, 31к2Чкаловская21-30 мин.Ботаническая» (комбинация metro-glue + корпуса) → house="31/2" — оба варианта корректны.

⚠️ Этот же PR ввёл отдельную регрессию (сравнение нотации корпуса дома между источниками) — заведена и закрыта отдельно как #2431 (fix PR #2432, смержен и задеплоен в той же сессии).

Закрыто PR #2429 (merge `752c3656`, задеплоено 2026-07-04). Живая проверка на реальных адресах из прода подтверждает: «ул. Амундсена, 2Чкаловская11-15 мин. пешком» → `house="2"` (не «15»), «ул. Щербакова, 31к2Чкаловская21-30 мин.Ботаническая» (комбинация metro-glue + корпуса) → `house="31/2"` — оба варианта корректны. ⚠️ Этот же PR ввёл отдельную регрессию (сравнение нотации корпуса дома между источниками) — заведена и закрыта отдельно как #2431 (fix PR #2432, смержен и задеплоен в той же сессии).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2423
No description provided.