receipt_parser - Python библиотека, помогающая распознавать товарную позицию из чеков. Для это задачи есть хороший сервис от Тинькофф, однако он не справляется с грязными данными, как на картинке выше. Изначально была задумка использовать нейронные сети, однако в процессе работы, понял, что на разметку нужно потратить много времени/денег, да и модель, основанная на правилах и словарях, даёт хороший результат.
- распознавание продукта;
- определение категории товара;
- распознавание брендов;
- перевод англицизмов (
хугарден --> hoegaarden
)🍺
Исходный код в размещен на GitHub.
Библиотека размещёна на Python package index:
pip install receipt-parser
Если возникнет ошибка при установке пакета:
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-izdic4qt/youtokentome/
То установите Cython и повторите попытку:pip install Cython
Для распознавания сейчас доступна только RuleBased модель.
На вход можно подавать как строку:
from receipt_parser import RuleBased
product_desription = 'Нап.пив.ХУГАР.ГРЕЙПФ.н/ф 0.47л'
rb = RuleBased()
rb.parse(product_desription)
output:
name | product_norm | brand_norm | cat_norm | |
---|---|---|---|---|
0 | Нап.пив.ХУГАР.ГРЕЙПФ.н/ф 0.47л | напиток, пиво | hoegaarden | Воды, соки, напитки |
Так и pd.DataFrame
(колонка с товарной позицией должна называться name):
from receipt_parser import RuleBased
rb = RuleBased()
rb.parse(df)
Также в библиотеке есть два вспомогательных класса:
- Normalizer - для нормализации;
- Finder - для поиска по словарям.
- Добавить тесты
- Дополнить словари и собранные датасеты
- Поднять сервис
- Перейти на нейронные сети...
Буду рад, если вы:
- найдёте баги;
- сможете оптимизировать код;
- дополните словари и датасеты;
- поможете с разметкой.