fix(tradein): yandex newbuilding rating drift — «4.3из 5» без пробела (#974) #1545

Merged
lekss361 merged 1 commit from fix/yandex-nb-rating-drift into main 2026-06-15 18:31:12 +00:00
Owner

Проблема

Валидационный yandex_newbuilding_sweep (run 80, limit=3) обогатил market.yandex_jk_enrichmentratings_count / text_reviews_count / developer_name / lat-lon заполнены, но rating = NULL для всех ЖК (юзер просил проверить, что rating ≠ NULL).

Live-диагностика через прод-браузер (ЖК Татлин 1592987 / Рио 1676217, 2026-06-15): рейтинг рендерится как «4.3из 5» / «4,5из 5»без пробела перед «из» (внутри «из 5» — nbsp \xa0). RE_RATING = (\d[.,]\d)\s+из\s+5 требовал \s+ (один-или-более) перед «из» → match=None, хотя ratings_count (N оценок) парсился.

Фрагмент реального body_text: Отзывы на ЖК «Татлин»4.3из 5Всего 1508 оценок.

Изменения

  • RE_RATING: (\d[.,]\d)\s+из\s+5(\d[.,]\d)\s*из\s+5 (разделитель перед «из» опционален). \s уже матчит nbsp, ломал именно отсутствующий пробел перед «из».
  • test_parse_rating_no_space_before_iz: регрессия на обе дрейфовые формы («4.3из 5», «4,5из\xa05»).

Существующие rating-тесты («4,3 из 5» с пробелом) остаются зелёными (\s*\s+).

Test plan

  • uv run ruff check — passed
  • uv run pytest -q1780 passed. 2 несвязанных env-only локальных падения (test_cian_valuation, test_search_api — чужие модули, идентичны до правки; в CI проходят).

После merge+deploy — повторить yandex-newbuilding-sweep (limit=3) и подтвердить rating ≠ NULL, затем полный прогон.

Известный отдельный хвост (не в scope): address тоже NULL (_extract_jk_address ловит nav-вхождение имени ЖК, не заголовок) — follow-up.

Refs #974

## Проблема Валидационный `yandex_newbuilding_sweep` (run 80, limit=3) обогатил `market.yandex_jk_enrichment` — `ratings_count` / `text_reviews_count` / `developer_name` / `lat`-`lon` заполнены, но **`rating` = NULL для всех ЖК** (юзер просил проверить, что rating ≠ NULL). Live-диагностика через прод-браузер (ЖК Татлин 1592987 / Рио 1676217, 2026-06-15): рейтинг рендерится как `«4.3из 5»` / `«4,5из 5»` — **без пробела перед «из»** (внутри «из 5» — nbsp `\xa0`). `RE_RATING = (\d[.,]\d)\s+из\s+5` требовал `\s+` (один-или-более) перед «из» → `match=None`, хотя `ratings_count` (`N оценок`) парсился. Фрагмент реального `body_text`: `Отзывы на ЖК «Татлин»4.3из 5Всего 1508 оценок`. ## Изменения - `RE_RATING`: `(\d[.,]\d)\s+из\s+5` → `(\d[.,]\d)\s*из\s+5` (разделитель перед «из» опционален). `\s` уже матчит nbsp, ломал именно отсутствующий пробел перед «из». - `test_parse_rating_no_space_before_iz`: регрессия на обе дрейфовые формы («4.3из 5», «4,5из\xa05»). Существующие rating-тесты («4,3 из 5» с пробелом) остаются зелёными (`\s*` ⊇ `\s+`). ## Test plan - [x] `uv run ruff check` — passed - [x] `uv run pytest -q` — **1780 passed**. 2 несвязанных env-only локальных падения (`test_cian_valuation`, `test_search_api` — чужие модули, идентичны до правки; в CI проходят). После merge+deploy — повторить `yandex-newbuilding-sweep` (limit=3) и подтвердить `rating ≠ NULL`, затем полный прогон. Известный отдельный хвост (не в scope): `address` тоже NULL (`_extract_jk_address` ловит nav-вхождение имени ЖК, не заголовок) — follow-up. Refs #974
lekss361 added 1 commit 2026-06-15 18:30:34 +00:00
fix(tradein): yandex newbuilding rating drift — "4.3из 5" без пробела (#974)
All checks were successful
CI / changes (push) Successful in 8s
CI / backend-tests (push) Has been skipped
CI / frontend-tests (push) Has been skipped
CI / openapi-codegen-check (push) Has been skipped
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
278dafba76
Валидационный yandex_newbuilding_sweep (run 80) заполнял ratings_count /
text_reviews_count / developer_name / lat-lon, но rating оставался NULL для всех
ЖК. Live-диагностика (прод-браузер, ЖК Татлин/Рио 2026-06-15): рейтинг рендерится
как «4.3из 5» / «4,5из 5» — БЕЗ пробела перед «из» (nbsp внутри «из 5»), а
RE_RATING требовал \s+ перед «из» → match=None.

- RE_RATING: (\d[.,]\d)\s+из\s+5 → (\d[.,]\d)\s*из\s+5 (пробел перед «из» опционален).
  \s уже матчит nbsp, поэтому «из\xa05» обрабатывался; ломал именно отсутствующий
  разделитель перед «из».
- test_parse_rating_no_space_before_iz: регрессия на обе дрейфовые формы.

Существующие rating-тесты («4,3 из 5» с пробелом) остаются зелёными (\s* ⊇ \s+).

Refs #974
lekss361 added the
scope/backend
scrapers
status/review
labels 2026-06-15 18:30:52 +00:00
lekss361 merged commit 291c000792 into main 2026-06-15 18:31:12 +00:00
lekss361 deleted branch fix/yandex-nb-rating-drift 2026-06-15 18:31:13 +00:00
Sign in to join this conversation.
No reviewers
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#1545
No description provided.