Repository navigation
fix(procurement): искать номинал независимо от кириллицы и латиницы - #852
Merged
Merged
Conversation
Клиент прислал ссылку на «Автоматический ввод резерва АВР NXZM-630S/3B 3P 630A», которого 36 штук на складе, и спросил, почему ассистент отвечает «наличие уточняется» и предлагает три других АВР. Позиция не попадала в выдачу вообще: в названии «630A» латиницей (U+0041), в запросе «630А» кириллицей (U+0410) — токен не находился, значимых совпадений оставалось ноль, и строку отбрасывал фильтр случайных чисел. Каталог расколот почти пополам: 11 501 позиция с кириллической А/Р/В после цифры и 10 167 с латинской, так что любой запрос с номиналом видел лишь свою половину. Данные при этом были верные — `in_stock=1, stock_qty=36, срок 4 дня`, — до ассистента они просто не доезжали. - `_fold()` сворачивает визуально неотличимые кириллические буквы в латиницу ТОЛЬКО для сопоставления; в выдачу название идёт как есть. Буквы б/г/з в таблицу не входят: «б» это не «6», такая подмена давала бы ложные совпадения с цифрами. - Сворачиваются обе стороны: название, категория, артикул и токены запроса. Токены — после стоп-слов и синонимов, иначе свёрнутое слово в `_STOPWORDS` (там русские «в», «для») не нашлось бы. - «ампер» словом добавлен в стоп-слова: на «нужен АВР 630 ампер» выдача состояла из АМПЕРМЕТРОВ — «ампер» был единственным значимым токеном и попадал в «амперметр», а «авр» и «630» короткие. Проверено на проде: «АВР 630А» и «АВР 630A» дают позицию клиента первой строкой с «в наличии 36 шт., срок до 4 дн.»; «нужен АВР 630 ампер» больше не возвращает амперметры. ## NEWS 🔍 **Ассистент перестал терять товары из-за похожих букв** В названиях товаров номиналы написаны по-разному: у одних «630А» русской буквой, у других «630A» английской — на вид не отличить, а для поиска это были разные слова. Из-за этого ассистент мог не найти товар, который лежит на складе, и предложить вместо него другие. Теперь он не различает такие буквы и видит весь каталог целиком. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Клиент прислал ссылку на АВР NXZM-630S/3B 3P 630A, которого 36 штук на складе, и спросил, почему ассистент отвечает «🕐 наличие уточняется» и предлагает три других АВР.
Данные были верные —
in_stock=1, stock_qty=36, lead_time_days=4, обновлено ночным синком. До ассистента они просто не доезжали: позиция не попадала в выдачу вообще.Причина — омоглифы. В названии «630A» латиницей (U+0041), в запросе «630А» кириллицей (U+0410): токен не находился, значимых совпадений оставалось ноль, и строку отбрасывал фильтр случайных чисел. Каталог при этом расколот почти пополам — 11 501 позиция с кириллической А/Р/В после цифры и 10 167 с латинской, так что любой запрос с номиналом видел лишь свою половину.
_fold()сворачивает визуально неотличимые кириллические буквы в латиницу только для сопоставления; в выдачу название идёт как есть. Буквы б/г/з в таблицу не входят: «б» это не «6», такая подмена давала бы ложные совпадения с цифрами._STOPWORDSлежат русские «в», «для», и свёрнутое слово там бы не нашлось.NEWS
🔍 Ассистент перестал терять товары из-за похожих букв
В названиях товаров номиналы написаны по-разному: у одних «630А» русской буквой, у других «630A» английской — на вид не отличить, а для поиска это были разные слова. Из-за этого ассистент мог не найти товар, который лежит на складе, и предложить вместо него другие. Теперь он не различает такие буквы и видит весь каталог целиком.
Test plan
test_offer_search_homoglyphs.py: запрос кириллицей находит латинское название (тот самый случай, и первой строкой), запрос латиницей находит кириллическое, оба написания «16А» находятся вместе, «ампер» не превращает запрос в амперметры, сам амперметр по прямому запросу по-прежнему находится, артикул с омоглифами ищется в любом написании,_foldне трогает не-омоглифыruff check .+ruff format --check .— чисто🤖 Generated with Claude Code