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 локальные тиры
|
<город>»). Используется чтобы НЕ пускать EKB-only локальные тиры
|
||||||
(geoportal/cadastral) на не-ЕКБ адрес: улица+дом, совпадающие с ЕКБ-домом
|
(geoportal/cadastral) на не-ЕКБ адрес: улица+дом, совпадающие с ЕКБ-домом
|
||||||
(проспект Ленина 1 есть в обоих городах), иначе адрес снапается в ЕКБ (#11).
|
(проспект Ленина 1 есть в обоих городах), иначе адрес снапается в ЕКБ (#11).
|
||||||
|
|
||||||
|
Явное "Екатеринбург" в адресе имеет приоритет над любым омонимом другого
|
||||||
|
города региона — иначе ЖК/посёлки с названием, совпадающим с другим
|
||||||
|
городом области (ЖК «Заречный», пос. «Сысерть» внутри ЕКБ), ложно
|
||||||
|
отсекали бы EKB-only тиры для реального ЕКБ-адреса.
|
||||||
"""
|
"""
|
||||||
normalized = " ".join(address.lower().split())
|
normalized = " ".join(address.lower().split())
|
||||||
|
# Явное "Екатеринбург" в адресе → это ЕКБ, даже если в тексте встречается
|
||||||
|
# омоним соседнего города (ЖК «Заречный», пос. Сысерть в составе МО «город
|
||||||
|
# Екатеринбург» и т.п. — реальные false-positive из прод-кэша).
|
||||||
|
if "екатеринбург" in normalized:
|
||||||
|
return False
|
||||||
for m in _NON_EKB_CITY_RE.finditer(normalized):
|
for m in _NON_EKB_CITY_RE.finditer(normalized):
|
||||||
prefix_words = normalized[: m.start()].split()
|
prefix_words = normalized[: m.start()].split()
|
||||||
if prefix_words and prefix_words[-1] in _DISTRICT_PREFIXES:
|
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 — НЕ город "Серов"
|
("Серова 27", False), # word-boundary — НЕ город "Серов"
|
||||||
("мкр Заречный, ул. Ленина 5", False), # район внутри города, не ЗАТО Заречный
|
("мкр Заречный, ул. Ленина 5", False), # район внутри города, не ЗАТО Заречный
|
||||||
("Каменск-Уральский, ул. Ленина 1", True),
|
("Каменск-Уральский, ул. Ленина 1", True),
|
||||||
|
# явное "Екатеринбург" перевешивает омоним соседнего города в названии
|
||||||
|
# ЖК/района внутри города (реальный false-positive из прод-кэша, #11):
|
||||||
|
("24, опалихинская улица, заречный, Верх-Исетский район, Екатеринбург", False),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_names_non_ekb_city(address: str, expected: bool) -> None:
|
def test_names_non_ekb_city(address: str, expected: bool) -> None:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue