Как работать с кириллицей и латиницей в тексте чеков
Что проверяют
Знаете ли вы главную беду таких данных: одинаковые на вид буквы из разных алфавитов. В строке «MOЛОКО» первые буквы могут быть латинскими, и для модели это другое слово. Интервьюер ждёт схему нормализации и понимание, где она портит настоящие латинские бренды. Следом часто спрашивают, как потом сопоставить товар с каталогом.
Как отвечать
Опишите конвейер по шагам:
- кодировка: текст из базы уже в Юникоде, но выгрузки из старых кассовых систем приходят в cp1251 и превращаются в «кракозябры». Такие строки ловят по характерным последовательностям и чинят перекодированием или библиотекой
ftfy; - нормализация Юникода:
unicodedata.normalize("NFKC", s)сводит совместимые символы, неразрывные пробелы и полноширинные цифры, затемcasefold()и замена «ё» на «е»; - гомоглифы: пары а/a, е/e, о/o, р/p, с/c, х/x, М/M, Т/T, Н/H. Токен с буквами обоих алфавитов приводят к тому алфавиту, которого в нём больше. Полный список похожих символов даёт
confusables.txtиз стандарта Unicode UTS #39; - чистая латиница: токен без кириллицы не трогают, это бренд или единица измерения. Для брендов держат словарь соответствий вроде «кока кола» и «coca cola»;
- сокращения и единицы: «МОЛ.ПАСТ.3,2% 0,9Л» разбирают регулярками: десятичная запятая, «Л», «КГ», «ШТ», проценты уходят в отдельные признаки;
- признаки: символьные n-граммы (
TfidfVectorizer(analyzer="char_wb")) устойчивее к опечаткам и обрезанным словам, чем словарь слов. Для смысловой близости подходят многоязычные эмбеддинги предложений.
Качество проверяйте на размеченной выборке чеков: какая доля позиций сопоставилась с каталогом до нормализации и после.
Где спотыкаются
Рассчитывают, что NFKC или lower() решат проблему. Нормализация Юникода не превращает кириллическую «С» в латинскую C, это разные символы без эквивалентности.
Переводят в кириллицу всю латиницу подряд и портят бренды, артикулы и единицы вроде «ml».
Лемматизируют обрезанные кассовые сокращения. Морфологический анализатор на «МОЛ.ПАСТ» выдаёт мусор, здесь нужны словарь сокращений и символьные признаки.