fix(tradein/geocoder): gate EKB-local tiers for non-EKB oblast addresses (#11) #2504
2 changed files with 13 additions and 0 deletions
|
|
@ -193,8 +193,18 @@ def _names_non_ekb_city(address: str) -> bool:
|
|||
<город>»). Используется чтобы НЕ пускать EKB-only локальные тиры
|
||||
(geoportal/cadastral) на не-ЕКБ адрес: улица+дом, совпадающие с ЕКБ-домом
|
||||
(проспект Ленина 1 есть в обоих городах), иначе адрес снапается в ЕКБ (#11).
|
||||
|
||||
Явное "Екатеринбург" в адресе имеет приоритет над любым омонимом другого
|
||||
города региона — иначе ЖК/посёлки с названием, совпадающим с другим
|
||||
городом области (ЖК «Заречный», пос. «Сысерть» внутри ЕКБ), ложно
|
||||
отсекали бы EKB-only тиры для реального ЕКБ-адреса.
|
||||
"""
|
||||
normalized = " ".join(address.lower().split())
|
||||
# Явное "Екатеринбург" в адресе → это ЕКБ, даже если в тексте встречается
|
||||
# омоним соседнего города (ЖК «Заречный», пос. Сысерть в составе МО «город
|
||||
# Екатеринбург» и т.п. — реальные false-positive из прод-кэша).
|
||||
if "екатеринбург" in normalized:
|
||||
return False
|
||||
for m in _NON_EKB_CITY_RE.finditer(normalized):
|
||||
prefix_words = normalized[: m.start()].split()
|
||||
if prefix_words and prefix_words[-1] in _DISTRICT_PREFIXES:
|
||||
|
|
|
|||
|
|
@ -187,6 +187,9 @@ def test_has_oblast_marker(text: str, expected: bool) -> None:
|
|||
("Серова 27", False), # word-boundary — НЕ город "Серов"
|
||||
("мкр Заречный, ул. Ленина 5", False), # район внутри города, не ЗАТО Заречный
|
||||
("Каменск-Уральский, ул. Ленина 1", True),
|
||||
# явное "Екатеринбург" перевешивает омоним соседнего города в названии
|
||||
# ЖК/района внутри города (реальный false-positive из прод-кэша, #11):
|
||||
("24, опалихинская улица, заречный, Верх-Исетский район, Екатеринбург", False),
|
||||
],
|
||||
)
|
||||
def test_names_non_ekb_city(address: str, expected: bool) -> None:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue