Завершён
data
Diafilm Parts Finder
Python-инструмент для каталога РГДБ: находит многочастные диафильмы в неструктурированной Excel-базе — fuzzy-матчинг, параллельная обработка, 5-листовой Excel-отчёт
В цифрах
0
Записей обработано
0
Время работы (мин)
0
Листов в Excel-отчёте
Проблема
Что я решала
Советские диафильмы бывают многосерийными, но в каталогах нет стандарта для обозначения частей. Можно встретить "часть 2", "pt. II", "2" или вообще ничего для одного и того же структурного понятия. Прежде чем мигрировать 100k+ записей в нормальную БД, нужно было разобраться, какие фильмы относятся к одной серии — вручную это месяцы.
Мой подход
Как я делала
Пайплайн на чистом Python — никакого веб-интерфейса, никакого фреймворка. Первый этап: регулярки вытаскивают маркеры частей (цифровые, кириллические, римские). Второй: rapidfuzz для нечёткого сравнения строк, кластеризует названия, которые выглядят как одна серия. Третий: многопоточная обработка — 100k записей за несколько минут, а не за час. На выходе 5-листовой Excel-отчёт: сгруппированные серии, найденные дубликаты, непарные части, шаги нормализации — библиотекарь может аудировать группировку, а не слепо доверять скрипту.
Выбор технологий
- rapidfuzz— Выбрала вместо python-Levenshtein за скорость — C++ ядро в 5-10 раз быстрее на 100k×100k парных сравнениях.
- Multi-threading— Fuzzy-сравнение CPU-связанное и embarrassingly parallel. 8 потоков превращают час в минуты на ноутбуке.
- openpyxl 5-sheet report— Библиотекари живут в Excel, а не JSON. Отдельные листы для группировок, дубликатов, непарных частей и нормализации — можно аудировать без запуска кода.
Результат
Что получилось
100 000 записей обрабатываются за 3-5 минут. Многосерийные фильмы корректно сгруппированы с высокой точностью (Excel-отчёт позволил библиотекарям выборочно проверять и подтверждать). Миграция в новую БД превратилась из "месяцы ручной работы" в "запустить скрипт, проверить Excel, утвердить". Одноразовый инструмент, который сделал дело и ушёл на покой.