Цена за 50 штук записалась в колонку «200 штук»: разбираю 42 PDF с коммерческими предложениями

IlyaAdonis 7 минут назад Объяснить с Цена за 50 штук записалась в колонку «200 штук»: разбираю 42 PDF с коммерческими предложениями Средний 7 мин 5 Python * Программирование * PDF Кейс У нас в мастерской за год...
Will Anthropic have the best AI model at the end of October 2026?
Значимый прорыв формирует отрасль ИИ: IlyaAdonis 7 минут назад Объяснить с Цена за 50 штук записалась в колонку «200 штук»: разбираю 42 PDF с коммерческими предложениями Средний 7 мин 5 Python * Программирование * PDF Кейс У нас в мастерской за год накопилась папка коммерческих предложений: 42 PDF, 532 страницы, 650 мегабайт. Прайсы, презентации, предложения под конкретных заказчиков. Мне понадобилась из неё одна таблица: позиция, тираж, цена за штуку.
Вопрос простой: насколько дешевеет изделие, когда тираж растёт с 10 до 200 штук, и одинаково ли это работает для футболки и для стикеров. Казалось, что это вечер работы: снять текст, найти числа рядом со словом «шт», сложить. Вышло иначе, и почти все ошибки по дороге были тихими.
Технические детали
Скрипт отрабатывал без исключений и выдавал правдоподобные числа, которые не совпадали с тем, что напечатано на странице. Сначала посчитать, где в папке вообще есть текстПервый проход ничего не парсит, он только считает, где в файлах вообще есть текст. Страница, с которой pypdf снимает меньше 30 символов, считается пустой.
compile(r"/uni({4}) def triage(pdf_path, min_chars=30): reader = PdfReader(pdf_path) empty, glyphs = 0, 0 for page in reader. extract_text() or "" empty += len(text. strip()) < min_chars glyphs += len(GLYPH.
findall(text)) return len(reader. pages), empty, glyphs Итог по папке:Файлов42Страниц532Страниц без текста166, это 31 %Файлов целиком из картинок7Файлов хотя бы с одной пустой страницей21Семь файлов сделаны так, что каждая страница представляет собой одну картинку. Скорее всего, их экспортировали из графического редактора «в PDF» без текстового слоя.
Отраслевые последствия
Ещё в четырнадцати файлах картинками стали отдельные страницы, обычно самые нужные, с ценой. Со всеми этими страницами я ничего не делал, о них ниже. Вторая колонка, glyphs, понадобилась из-за следующей находки.
Буквы, которые пришли именамиПоиск по слову «футболка» в одном из предложений ничего не нашёл, хотя футболка там на каждой странице. Вот что pypdf отдал с первой страницы:КОММЕРЧЕСКОЕ ПРЕДЛОЖЕНИЕ /uni041F/uni043E/uni0434/uni0430/uni0440/uni043E/uni0447/uni043D/uni044B/uni0435 /uni0438 ... Заголовок читается, а дальше идут имена глифов.
В спецификации PDF (ISO 32000-1, раздел 9. 10 про извлечение текста) описано, откуда это берётся. Внутри PDF текст хранится кодами глифов шрифта, а не символами Юникода.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




