Improve sparse and structured catalog matching
This commit is contained in:
1 parent
2982161374
commit
42f8f07207
8 files changed
+739
-20
No files matched your search
@@ -118,6 +118,8 @@ Unicode- и текстовая нормализация
|
||||
↓
|
||||
восстановление опечаток
|
||||
↓
|
||||
вывод типа по триграммам, если алиаса нет
|
||||
↓
|
||||
лексическое ранжирование кандидатов
|
||||
↓
|
||||
извлечение типизированных характеристик
|
||||
@@ -194,7 +196,13 @@ alias_to_canonical[normalize_text(alias)] = canonical
|
||||
|
||||
отличаются одной соседней перестановкой. А повреждённое `шураыввавёрт` всё ещё может восстановиться до категории `шуруповерт`, но низкая уверенность в категории не превращает один из нескольких шуруповёртов в ложный `matched`.
|
||||
|
||||
### Лексическое ранжирование
|
||||
### Лексический fallback и ранжирование
|
||||
|
||||
Если алиас товарного типа не найден, триграммы собирают короткий список
|
||||
ближайших строк каталога. Тип выводится только когда три лучшие строки относятся к
|
||||
одному типу и имеют общее слово, которое точно, по префиксу или с малой опечаткой совпало со словом
|
||||
запроса. Поэтому `удар` находит `ударная дрель`, а `аквариум 125 мм` не выбирает УШМ только
|
||||
из-за числа `125`.
|
||||
|
||||
После определения товарного типа поиск ограничивается соответствующей частью каталога. Внутри неё кандидаты получают совокупный лексический score:
|
||||
|
||||
@@ -203,7 +211,8 @@ alias_to_canonical[normalize_text(alias)] = canonical
|
||||
- выравнивание слов с Damerau–Levenshtein;
|
||||
- покрытие точных токенов запроса.
|
||||
|
||||
BM25 и n-граммы отвечают только за порядок кандидатов. Они не имеют права отменять конфликт размеров или модели.
|
||||
BM25 и n-граммы отвечают за выбор и порядок кандидатов, но не имеют права отменять
|
||||
конфликт размеров или модели.
|
||||
|
||||
### Структурные характеристики
|
||||
|
||||
@@ -441,6 +450,7 @@ python -m pytest -q
|
||||
- точные совпадения;
|
||||
- алиасы и разговорные названия;
|
||||
- Damerau–Levenshtein и тяжёлые опечатки;
|
||||
- вывод товарного типа по одному слову и шумным фразам;
|
||||
- разные записи размеров;
|
||||
- отсутствующие размеры, профили и резьбы;
|
||||
- неоднозначные фасовки;
|
||||
@@ -451,7 +461,10 @@ python -m pytest -q
|
||||
- максимум три кандидата;
|
||||
- диапазон confidence;
|
||||
- строгий формат request/response;
|
||||
- единственный endpoint `/match`.
|
||||
- единственный endpoint `/match`;
|
||||
- self-retrieval всех позиций каталога по полному названию;
|
||||
- поиск по каждому каноническому типу, бренду и модельному коду;
|
||||
- exact-only поиск без названия товара по размерам и структурным атрибутам.
|
||||
|
||||
`tests/test_message_corpus.py` автоматически читает все непустые строки из
|
||||
`messages.txt` и `more_messages.txt`, прогоняет их через matcher и строго
|
||||
|
||||
Reference in new issue
Block a user