Распознавание марки и модели ТС

Прикладной сервис Версия: 0.1 draft

Распознавание в наименовании ТС марки, модели и остатка наименования без марки — чистый алгоритм без построения групп и фильтрации справочника по нормам.

⟨/⟩ Исходник

1. Назначение

Алгоритм отвечает только за разбор строки наименования ТС (Транспортное средство, «Марка и модель базы ТС»): какая марка и какая модель распознаны и какая часть строки осталась после удаления марки.

Он не строит базовую группу, не фильтрует модификации по нормам и топливу и не решает, что делать с пустым результатом — это ответственность вызывающих процедур:

2. Нормализация сравнений

Все сравнения идут по нормализованному ключу: нижний регистр, ё → е, транслитерация кириллицы в латиницу, удаление всех небуквенно-цифровых символов. Токены — части строки после разделителей длиной от 2 символов.

3. Распознавание марки

DetectBrand(name) — каноническая марка по мастер-списку марок (drom + постановление + доменный список) с алиасами (Алиас марки ТС). Ключи проверяются от длинных к коротким; результат — первое совпадение:

Если совпадений нет — пустая строка.

DetectBrandIn(rows, name) — марка только из справочника вида ТС. Сначала берётся DetectBrand(name); результат принимается, если такая марка есть среди марок строк rows. Если каноническая марка в группе не найдена, повторно ищется самая длинная марка среди марок rows по тем же критериям совпадения. Итог всегда — марка из справочника вида ТС, поэтому омонимы мастер-списка не подставляются: например, «Genesis» в «HYUNDAI GENESIS», где в справочнике это модель Hyundai.

Мастер-список марок — справочник Марка ТС (наименование), алиасы — связанные записи Алиас марки ТС: токен сопоставляется либо с наименованием марки, либо с алиасом любой её связанной записи.

4. Распознавание модели

DetectModel(rows, name) — среди моделей строк rows (Модель ТС) выбирается модель с самым длинным нормализованным наименованием (от 2 символов), которое целиком входит в нормализованное имя ТС. Если ни одна не входит — пустая строка.

5. Остаток наименования ТС

BuildNameRemainder(name) — часть строки «Марка и модель базы ТС» после удаления марки: строка разбивается на токены, из них удаляются токены, являющиеся ключами марок мастер-списка, оставшиеся токены (от 2 символов) склеиваются через пробел.

Это не отдельное поле ТС и не «модификация»: остаток — рабочий текст для поиска. Вызывающие используют его по-разному:

Источник строки — «Марка и модель базы ТС». Использовать ли для спецтехники ещё и «Модель спец. автомобиля» — открытый вопрос OQ_ModificationSelection.

Связанные артефакты

Документы