Сообщество - Программирование на python

Программирование на python

929 постов 11 940 подписчиков

Популярные теги в сообществе:

2

Сортировка (программирование)

UPD:

сей пост не на что не претендует и опубликован тут исключительно в образовательных целях. он показывает что можно доработать простой и не очень производительный алгоритм, который из аутсайдеров выходит в топ из не рекурсивных алгоритмов сортировки.

предлагаю затестить алгоритм сортировки

Сортировка (программирование)

по скорости работы уступает:

Быстрая сортировка (Quick Sort) ~ в 50 раз,

Сортировка слиянием (Merge Sort) ~ в 30 раз,

работает быстрее:

Сортировка выбором (Selection Sort) ~ 25%

Сортировка вставками (Insertion Sort) ~ 33%

Пузырьковая двунаправленная (cocktail_shaker_sort) ~ 250%

Пузырьковая сортировка (Bubble Sort) классическая - 300%

моё, т.к. алгоритм пилил сам

по поводу встроенных сортировок:

~1500 раз встройка быстрее .sort() которая, np.sort - практически в бесконечность :)

<function bubble_sort_dual at 0x0000025DA011A020> - 5.8732628822 sec

встроенная функция sort: 0.002321958541870117

numpy np.sort: 0.001234292984008789

длинна массива = 20000 4-значных чисел

https://www.programiz.com/online-compiler/6eYFhgRj98Hd0

Показать полностью 1
4

Python Онлайн - Современная российская онлайн-платформа для программирования на Python

Здравствуйте! 👋

Мы рады представить Вам наш новый IT-сервис — Python Онлайн. Это современная российская онлайн-платформа, которая позволяет разрабатывать на языке Python прямо в браузере, без необходимости устанавливать какое-либо программное обеспечение. Наш сервис пригодится как профессиональным Python-разработчикам, так и тем, кто только начинает изучать программирование.

Python Онлайн предлагает возможность писать и запускать код в удобном веб-интерфейсе. Это особенно важно для новичков, которые хотят сосредоточиться на изучении Python, не тратя время на настройку рабочей среды. Также есть возможность сохранять или открывать файлы .py со своего устройства. Платформа идеально подходит для выполнения учебных заданий, экспериментов с кодом и освоения основных концепций программирования.

Ссылка на сайт: https://onpython.pythonanywhere.com

Наш e-mail: kumironline@ya.ru

Мы в Telegram: t.me/informa_tg

Показать полностью
8

Ответ на пост «Векторный поиск ближайших соседей»1

Векторный поиск - это для многомерных пространств.

У тебя пространство трех, максимум четырехмерное. Ну ладно, я в колористике не разбираюсь, допустим шестимерное. Судя по твоему коду, трехмерное, но допустим, ты упростил.

Итак, у тебя маленькая база (60 тысяч кортежей - ни о чём) и маломерное пространство.

На хрена тут векторный поиск? Как ты будешь тренировать эмбеддинги? Ты осознаешь, что смысл эмбеддингов в том, что бы сжать, грубо говоря, многомиллионмерное пространство в стомерное?

Ты, наверное, имел в виду не векторный поиск, а алгоритмы приближенного поиска ближайшего соседа. Векторный поиск состоит в том, чтобы точки в многомерном пространстве (и возможно заранее неизвестной размерности) представить в виде сравнительно маломерных векторов, а потом применить приближенный поиск ближайшего соседа. Сам по себе поиск ближайшего соседа - не векторный поиск, а его составная часть, причем полезная сама по себе.

Но в твоем случае и этого не требуется. У тебя и данных немного.

По сути ты говоришь: "Я захотел сделать векторный поиск, но вектора мне не нужны. С библиотеками приближенного поиска ближайшего соседа в многомерии я не разобрался и сделал строгий поиск, перебрав все расстояния и тупейшим образом выбрав ближайшие. И это отлично сработало [потому что у меня маломерный случай и очень мало данных]. Вот как здорово я сделал векторный поиск без библиотек, а в следующий раз я научу вас делать "векторный поиск" документов [методом полного перебора всех tf-idf]"

TL;DR: ты путаешь векторный поиск с приближенным поиском ближайшего соседа, а реализовал самый прямолинейный, очевидный и доступный начинающему школьнику алгоритм полного перебора.

Показать полностью
2

Векторный поиск ближайших соседей1

Был у меня недавно проект: в нем нужно было реализовать поиск похожих цветов в базе автоэмалей. База, к слову, не мелкая — около 60 тысяч записей. Пользователи — сотрудники, и им важно, чтобы всё работало шустро, без долгих загрузок и всяких «подождите, ищем».

Первая мысль, как у любого — нужен векторный поиск. Типа «найди мне ближайшие цвета по RGB или LAB пространству». Ну и естественно сразу в голове всплывает pgvector — оно на слуху, популярно, куча гайдов. Уже почти начал устанавливать, но в какой-то момент остановился и задал себе простой вопрос: «А оно мне точно надо?»

Контекст у меня был такой: база у меня на PostgreSQL, но всё приложение — внутреннее, без публичного API, и работает оно под капотом почти всё в памяти. Таблицы, с которыми постоянно работают, я подгружаю в оперативку через posix_ipc, и использую их в виде pandas DF. И вот тут я подумал: если данные уже в памяти, зачем мне вообще плодить сущности?

pgvector — это красиво, модно, но это лишняя прослойка. Это нужно ставить расширение, тащить данные обратно из базы, писать SQL-запросы, потом обрабатывать. Даже если обёртку сделать удобную — это будет ощутимо медленнее. И не просто медленнее — нужно будет юзеру показать лоадер, заставить его ждать. А я вот терпеть не могу, когда система тормозит и юзер ждёт, когда она «сообразит».

Я решил сделать проще. Раз таблица уже в DataFrame, почему бы не сделать обычный евклидов поиск по RGB координатам напрямую с помощью numpy? LAB можно тоже использовать — но чтобы не усложнять, если юзер вводит LAB, я просто прогоняю его через colorspacious в RGB. лоя металликов и перламутров берем только средний цвет - 45 градусов спектрофотометра.
Нам не нужно суперточности в духе "серый слегка серее", нам нужно — визуально похоже, и по ТЗ этого достаточно.

Сел, написал функцию. Получилось буквально на коленке, без всяких зависимостей кроме numpy и pandas. Работает за 0.01 секунды — и результат юзер видит моментально, как будто система заранее всё знала. Ни одного «ожидайте» на экране. Всё просто и по делу.

Вот сама функция:

def vector_search(df, r, g, b, count=30):
'''
descrip: Ищет count ближайших по цвету записей в df
param:
df — df с колонками r, g, b
r, g, b — координаты цвета
count — сколько ближайших цветов вернуть
return: df с колонками distance и similarity
'''
# Вычисляем евклидово расстояние между цветами
distances = np.sqrt((df['r'] - r) ** 2 + (df['g'] - g) ** 2 + (df['b'] - b) ** 2)
# Максимально возможное расстояние между цветами в RGB
max_distance = np.sqrt(255 ** 2 * 3)
# Вычисляем "похожесть" в процентах
similarity = 100 * (1 - distances / max_distance)
df['distance'] = distances
df['similarity'] = round(similarity, 2)# Для юзера процент совпадения
# Возвращаем ближайшие count записей по расстоянию
return df.nsmallest(count, 'distance')

Работает быстро, просто, понятно. Никаких зависимостей, никаких расширений к БД. Если честно, получаю моральное удовлетворение, когда делаю вот такие решения — без «enterprise боли», просто сработало и всё.

иногда лучше сесть, подумать и не городить велосипед, даже если он модный и с титановой рамой. Если можно обойтись наипростейшим решением — обходись.

Таким же способом можно организовать векторный полнотекстовый поиск. К примеру:

Берётся текст (название цвета, описание и т.п.) и прогоняется через векторизатор.
Самые простые:

• TfidfVectorizer из sklearn — быстрый, работает оффлайн.

• Или что-то вроде SentenceTransformer / fastText — они понимают смысл фразы.

Далее получаешь вектор запроса, сравниваешь его с векторами из базы через cosine similarity или ту же евклидову метрику. Это как расстояние между точками в многомерном пространстве.

Но такой задачи не было. Однако может кому-то пригодится.

Всех благ.

Векторный поиск ближайших соседей
Показать полностью 1
14

Скрипт, находящий самые выгодные облигации к покупке

На Московской бирже торгуется более 2500 облигаций, но большая часть из них неликвидна - в стакане почти нет предложений и сделок совершается крайне мало. Это затрудняет покупку и продажу таких бумаг. При этом известные мне публичные сервисы не суммируют объемы торгов за период, поэтому сложно быстро найти облигации с высокой ликвидностью.

Пять лет назад написал Node.js-скрипт, затем адаптировал его для Google Таблиц, а теперь разрабатываю Python версию. При помощи сообщества на GitHub эта Python версия идёт к созданию полноценной библиотеки с расширенными возможностями: автоматический поиск ликвидных облигаций, расчет денежных потоков, сбор новостей по эмитентам и вычисление оптимального объема покупки. Все это направлено на помощь простым инвесторам, вроде нас с вами, чтобы оперативно находить выгодные инвестиционные инструменты и принимать решения на основе актуальной информации.

В материале будет много интересной информации для поиска облигаций, но также будет интересно почитать и тем, кто хочет узнать о более простых альтернативах инвестирования.

Критерии выбора ликвидных облигаций на Московской Бирже

Ликвидность это один из ключевых параметров, поскольку даже высокодоходная бумага бесполезна, если её невозможно купить. В моём скрипте для поиска облигаций используются несколько основных критериев:

Доходность
Эффективная доходность облигации — один из главных параметров. В фильтре задаётся диапазон, например, от 15% до 30%. Важно учитывать, что этот показатель не включает налог с купонов и комиссии брокера.

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

  • Если облигация торгуется сильно ниже номинала, основная доходность будет сформирована к моменту погашения (за счёт разницы между ценой покупки и номиналом).

  • Если облигация торгуется близко к номиналу, основная доходность складывается из купонных выплат в течение срока жизни.

Пример: облигация ЕвроТранс БО-001Р-03 на 10 марта 2025 года (код RU000A1061K1, ссылка):

  • Текущая цена: 86% от номинала

  • Купонная доходность: 13,6% годовых

  • Доходность к погашению: 26,78% годовых. Доходность к погашению предполагает, что вы держите облигацию до погашения и что все купонные выплаты будут произведены в срок.

Откуда такая разница? Дело в том, что облигация сейчас торгуется ниже номинала, а при погашении инвестор получит 100% номинальной стоимости. То есть, кроме купонов, инвестор дополнительно зарабатывает на разнице в цене. Именно поэтому параметр текущей цены помогает выбрать, когда получать основную доходность — постепенно в течение срока или разово в момент погашения.

Дюрация
Показатель дюрации позволяет выбрать облигации с нужным сроком жизни. Например, если мне нужна бумага на ближайшие 3–18 месяцев, фильтр исключает слишком краткосрочные или долгосрочные варианты.

Прозрачность выплат
Наличие полной информации о будущих купонных выплатах или наличие оферты.
Также я исключаю флоатеры, поскольку Московская биржа не передаёт по ним данные о будущих платежах.

Ликвидность
Ликвидность - основной критерий, ради которого создавался этот инструмент. В скрипте анализируются:

  • Минимальное число сделок за каждый из последних 15 дней - чтобы исключить облигации, которые могут внезапно «замереть».

  • Общий объём сделок за 15 дней - параметр, который позволяет выявлять бумаги с устойчивым спросом. Этот скрипт позволяет гибко подстраивать фильтры и находить действительно ликвидные облигации, подходящие под конкретно Вашу стратегию инвестирования.

Как работает скрипт

Скрипт использует API Московской биржи для получения актуальных данных об облигациях. Данные скачиваются для ознакомительных целей и это позволяет оперативно находить ликвидные облигации.

Ограничение запросов. С сентября 2024 года API Московской биржи начало периодически разрывать соединение без объяснения причин. Это продолжалось около полугода, поэтому в коде был установлен лимит — не более 50 запросов в минуту. Сейчас, в марте 2025, эта проблема больше не наблюдается, но ограничение оставлено для стабильности.

Московская биржа периодически меняет формат данных, что требует оперативного обновления скрипта.

Пошаговое руководство по запуску

Если вы не разбираетесь в программировании, но хотите воспользоваться этим Python-скриптом, следуйте инструкции:

Шаг 1. Скачайте скрипт

  1. Откройте ссылку: GitHub проекта.

  2. Нажмите "Code" → "Download ZIP".

  3. Разархивируйте ZIP в удобную папку.

Шаг 2. Установите Python

Если Python не установлен:

Шаг 3. Установите зависимости проекта

  1. Откройте папку с проектом.

  2. Дважды кликните файл install_requirements.bat (Windows) или install_requirements.command (MacOS).

Шаг 4. Запустите скрипт

Дважды кликните файл 1_bonds_search by criteria.py.

Во время выполнения отображается лог выполнения.

Шаг 5. Наслаждайтесь результатом

Будет создан файл с текущей датой: bond_search_2025-03-25.xlsx

Обычные вклады это до сих пор альтернатива облигациям

Государственные облигации федерального займа считаются наиболее надежными инструментами инвестирования и приносят доходность в диапазоне от 14% до 18%, в зависимости от сроков обращения. Этот показатель сейчас уступает ставкам по банковским вкладам.

Следующими по надежности идут корпоративные облигации, чья доходность может доходить до 35%, однако они сопряжены с большими рисками. Надо понимать что высокие доходности несут высокие риски: это подходит тем, кто больше разбирается в данной сфере и лучше понимает, что такое эмитенты и как с ними работать.

Банковские вклады занимают промежуточную позицию между этими категориями активов. Их доходность сравнима с доходностью надежных корпоративных облигаций, однако основное преимущество вкладов заключается в отсутствии рисков благодаря системе государственного страхования вкладов. Они также отличаются простотой использования: достаточно разместить средства и ожидать истечения срока депозита.

Опытным инвесторам можно рекомендовать облигации, но тем, кто предпочитает избегать глубокого анализа рынка и сложных поисков, банковские вклады станут достойной альтернативой. К тому же, сейчас легко отслеживать ситуацию на рынке. Можно просто пользоваться поисковиком Яндекса.

Преимущества open source и шаги к Python-библиотеке

Идея - набор из четырёх скриптов для личного использования. Разработал их как частный инвестор, понимая какие задачи стоят передо мной:

  1. Поиск ликвидных облигаций

  2. Автоматический расчёт денежных потоков

  3. Сбор новостей по эмитентам

  4. Расчёт оптимального объёма покупки

От одиночного скрипта к полноценной библиотеке

Так как проект открыт, к нему подключилось сообщество. Одним из первых с pull request пришёл lmasikl, который заинтересовался темой облигаций и предложил преобразовать набор  скриптов в полноценную Python-библиотеку.  Уже было внесено множество улучшений:

Март 2025

  • #12 – Добавлен простой тест как пример (автор: lmasikl, одобрено 19 марта)

  • #11 – Добавлена диаграмма взаимодействия пользователя со скриптом (автор: lmasikl, одобрено 17 марта)

  • #7 – Отформатирован код с дефолтными настройками Ruff (автор: lmasikl, одобрено 14 марта)

  • #6 – Внесен в приложение скрипт расчета оптимального объема покупки облигаций (автор: lmasikl, одобрено 13 марта)

  • #5 – Перенесен в приложение скрипт поиска новостей (автор: lmasikl, одобрено 12 марта)

  • #4 – Перенесен в приложение скрипт поиска облигаций (автор: lmasikl, одобрено 10 марта)

  • #3 – Начат переход к полноценной библиотеке (автор: lmasikl, одобрено 6 марта)

Февраль 2025

  • #2 – Исправлены некорректные значения в рублях (автор: gogbajbobo, одобрено 21 февраля)

  • #1 – Выполнен рефакторинг кода (автор: lmasikl, одобрено 20 февраля)

Добавлен план схемы работы:

Почему open source — это важно?

Открытый код даёт возможность сообществу вносить улучшения, исправлять ошибки и расширять функциональность. Гибкость библиотеки позволяет каждому настроить поиск облигаций под собственные нужды, создавая индивидуальные стратегии отбора.

Как практически использовать эту библиотеку

Допустим, у нас есть 300 000 рублей, которые мы хотим вложить в облигации. Чтобы минимизировать риски, разделим сумму на 10 разных облигаций.

  1. Поиск ликвидных облигаций
    Первая часть скрипта анализирует рынок и отбирает бумаги с хорошей ликвидностью, подходящие под заданные критерии (доходность, дюрация, цена и т. д.).

  2. Проверка эмитента
    Запускаем вторую часть скрипта — он собирает последние новости по эмитентам. Если обнаружены негативные публикации (например, судебные иски или финансовые проблемы компании), такие облигации исключаем из списка.

  3. Расчёт денежных потоков
    Далее, используя третью часть скрипта, можно заранее рассчитать будущие выплаты по купонам и спрогнозировать точную доходность портфеля.

  4. Расчёт объёма покупки
    Последний скрипт поможет рассчитать, сколько именно облигаций можно приобрести с учётом доступного капитала и НКД. Это позволяет эффективно распределить средства и избежать недостатка ликвидности.

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

Заключение

Использование этого скрипта позволяет частному инвестору систематизировать процесс подбора облигаций, минимизировать риски и упростить управление портфелем.

Присоединяйтесь к сообществу!

Этот проект развивается благодаря усилиям энтузиастов и разработчиков, заинтересованных в автоматизации инвестирования. Если у вас есть идеи по улучшению функциональности или вы хотите протестировать новые возможности, присоединяйтесь к обсуждению на GitHub!

Любые предложения, правки и новые модули помогут сделать библиотеку ещё более мощным инструментом для инвесторов.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

25 марта 2025 г.

Показать полностью 9

3 библиотеки для преобразования цветных PDF в черно-белые с помощью Python: Руководство по сравнению

Оглавление:

  • Обзор

  • Зачем преобразовывать цветные PDF-файлы в черно-белые?

  • Библиотеки для преобразования PDF
    - Spire.PDF for Python

    - PyMuPDF

    - pdf2image

  • Сравнение библиотек

  • Заключение

Обзор

В современную цифровую эпоху файлы PDF являются стандартом для обмена документами. Преобразование цветного PDF в черно-белый может быть полезно для печати, уменьшения размера файла или улучшения читабельности.

Python предлагает несколько библиотек для работы с PDF, в том числе для преобразования цветных PDF в черно-белые. В этой статье мы рассмотрим три популярные библиотеки для этой задачи, выделим их плюсы и минусы, чтобы помочь вам выбрать лучший вариант для ваших нужд.

Зачем преобразовывать цветные PDF-файлы в черно-белые?

Прежде чем перейти к рассмотрению библиотек, необходимо понять, почему вам может понадобиться преобразовать цветной PDF в черно-белый. Вот несколько причин:

  • Экономичная печать: Черно-белая печать позволяет значительно сократить расходы на печать, особенно в условиях, когда печатаются большие объемы документов.

  • Улучшенная читаемость: Для некоторых документов черно-белая печать может повысить удобочитаемость за счет минимизации отвлекающих факторов, вызванных цветами.

  • Соответствие требованиям и архивирование: Некоторые организации требуют архивировать документы в черно-белом формате для соблюдения правовых норм.

Библиотеки для преобразования PDF

Теперь давайте обсудим три популярные библиотеки Python для преобразования цветных PDF-файлов в черно-белые: Spire.PDF for Python, PyMuPDF и pdf2image. У каждой из этих библиотек есть свои сильные и слабые стороны, которые мы подробно рассмотрим.

1. Spire.PDF for Python (коммерческая библиотека с доступной бесплатной версией)

Обзор

Spire.PDF for Python - это мощная библиотека, предназначенная для работы с PDF. Она позволяет легко конвертировать PDF в различные форматы, включая преобразование цветных PDF в черно-белые.

Установите Spire.PDF for Python:

pip install spire.pdf

Пример кода

Вот базовый пример того, как использовать Spire.PDF для преобразования цветного PDF в черно-белый:

from spire.pdf.common import *

from spire.pdf import *

input_pdf = "C:/Users/Administrator/Desktop/input.pdf"

output_pdf = "output/black_and_white.pdf"

# Загружаем PDF-документ, инициализируя класс PdfGrayConverter

converter = PdfGrayConverter(input_pdf)

# Конвертируем документ в градации серого

converter.ToGrayPdf(output_pdf)

Плюсы:

  • Сохраняет текст и векторную графику: Преобразует PDF-файлы в черно-белые без растеризации, сохраняя возможность выделения и поиска текста.

  • Высокоуровневый API: Простой в использовании API, разработанный для задач по работе с PDF.

  • Расширенные возможности: Поддержка расширенных функций PDF, таких как аннотации, формы, шифрование и многое другое.

  • Коммерческая поддержка: Профессиональная поддержка, регулярные обновления и документация.

  • Кроссплатформенность: Работает в Windows, macOS и Linux.

Минусы:

  • Стоимость: Это коммерческая библиотека, поэтому для использования в производстве необходимо приобрести лицензию.

  • Ограниченный бесплатный уровень: Бесплатная версия имеет ограничения по количеству обрабатываемых страниц.

  • Зависимость: Добавляет зависимость от сторонней библиотеки, что может быть не идеальным для проектов с открытым исходным кодом или легких проектов.

2. PyMuPDF (с открытым исходным кодом)

Обзор

PyMuPDF, также известная как Fitz, - это легкая и быстрая библиотека PDF для Python. Она поддерживает различные форматы документов и предоставляет функции для манипулирования и рендеринга PDF-файлов.

Установите PyMuPDF:

pip install pymupdf

Пример кода

Вот как можно преобразовать цветной PDF в черно-белый с помощью PyMuPDF:

import fitz  # PyMuPDF

def convert_to_black_and_white(input_pdf, output_pdf, dpi=150):

# Открываем входной PDF

pdf_document = fitz.open(input_pdf)


# Создаем новый PDF для выхода

new_pdf = fitz.open()


# Определяем матрицу для контроля разрешения (DPI)

# Стандартный DPI для get_pixmap() равен 72, поэтому мы масштабируем соответственно

zoom = dpi / 72  # Коэффициент масштабирования для желаемого DPI

matrix = fitz.Matrix(zoom, zoom)


# Проходим по каждой странице

for page_num in range(len(pdf_document)):

page = pdf_document.load_page(page_num)


# Получаем пиксмап (изображение) страницы с заданным разрешением

pix = page.get_pixmap(matrix=matrix, colorspace=fitz.csGRAY, alpha=False)


# Создаем новую страницу в новом PDF с теми же размерами

new_page = new_pdf.new_page(width=pix.width, height=pix.height)


# Вставляем изображение в градациях серого на новую страницу

new_page.insert_image(new_page.rect, pixmap=pix)


# Сохраняем новый PDF

new_pdf.save(output_pdf)

new_pdf.close()

pdf_document.close()

# Пример использования

input_pdf = "C:/Users/Administrator/Desktop/input.pdf"

output_pdf = "output/black_and_white.pdf"

convert_to_black_and_white(input_pdf, output_pdf, dpi=300)  # Устанавливаем DPI на 300 для более высокого качества

Плюсы:

  • Открытый исходный код: Свобода использования и модификации.

  • Высокая производительность: Чрезвычайно быстро и эффективно выполняет задачи по работе с PDF.

  • Сохраняет текст и векторную графику: Возможность работать с содержимым PDF напрямую без растеризации (при правильном использовании).

  • Гибкость: Поддерживает широкий спектр операций с PDF, включая рендеринг, извлечение текста и аннотирование.

  • Легкий: Минимум зависимостей, легко интегрируется в проекты.

Минусы:

  • Сложность: API может быть сложным для новичков, особенно для выполнения сложных задач.

  • Требуется растеризация для преобразования на основе изображений: Если вам нужно преобразовать страницы в черно-белый формат путем растеризации, это потребует дополнительных шагов (например, преобразования страниц в изображения и обратно).

  • Ограниченная документация: Несмотря на мощную библиотеку, документация может быть скудной для некоторых случаев использования.

3. pdf2image (с открытым исходным кодом)

Обзор

Библиотека pdf2image предназначена в первую очередь для преобразования PDF-файлов в формат изображений. Однако с помощью библиотеки Pillow вы можете преобразовать эти изображения в полутоновые и сохранить их обратно в виде PDP.

Установите pdf2image и Pillow:

pip install pdf2image pillow

Кроме того, pdf2image использует библиотеку Poppler для преобразования PDF-файлов в изображения. Poppler является отдельной системной зависимостью и должен быть установлен на вашей машине.

Пример кода

Вот пример использования pdf2image для преобразования цветного PDF в черно-белый:

from pdf2image import convert_from_path

from PIL import Image


def convert_pdf_to_bw(input_pdf, output_pdf, dpi=200, poppler_path=None):

# Шаг 1: Конвертируем страницы PDF в изображения

images = convert_from_path(input_pdf, dpi=dpi, poppler_path=poppler_path)


# Шаг 2: Конвертируем изображения в градации серого

bw_images = []

for image in images:

bw_image = image.convert("L")  # Конвертируем в градации серого

bw_images.append(bw_image)


# Шаг 3: Сохраняем изображения в градациях серого как новый PDF

bw_images[0].save(output_pdf, save_all=True, append_images=bw_images[1:])


# Пример использования

input_pdf = "C:/Users/Administrator/Desktop/input.pdf"

output_pdf = "output/black_and_white.pdf"

poppler_path = "C:/poppler-24.08.0/Library/bin"  # Требуется только если Poppler не в PATH

convert_pdf_to_bw(input_pdf, output_pdf, dpi=300, poppler_path=poppler_path)

Плюсы:

  • Простота и удобство использования: Ориентирован на преобразование PDF-файлов в изображения, что делает его удобным для работы с изображениями.

  • Открытый исходный код: Свободно используется и модифицируется.

  • Интеграция с Pillow: Работает с библиотекой Pillow для обработки изображений (например, преобразования в оттенки серого).

  • Кроссплатформенность: Работает в Windows, macOS и Linux.

Минусы:

  • Растеризация: Преобразует PDF-страницы в изображения, что означает потерю текста и векторной графики (текст больше не может быть выделен или доступен для поиска).

  • Размер файла: Выходные PDF-файлы могут стать большими, особенно при высоких значениях DPI.

  • Зависимость от Poppler: Требуется установка библиотеки poppler, что может стать препятствием для некоторых пользователей.

  • Ограниченность рабочими процессами, основанными на изображениях: Не подходит для задач, требующих работы с текстом или вектором.

Сравнение библиотек

Заключение

Выбор подходящей библиотеки для преобразования цветных PDF-файлов в черно-белые в Python зависит от ваших конкретных требований, включая сложность PDF-файлов, потребности в производительности и дополнительные возможности.

Взвесив все плюсы и минусы каждой из рассмотренных библиотек, вы сможете принять взвешенное решение, которое подойдет именно вашему проекту. Независимо от того, являетесь ли вы разработчиком, аналитиком данных или бизнес-профессионалом, эти инструменты помогут вам эффективно управлять PDF-документами.

Показать полностью 2

Лучший ИИ?

Какой ИИ лучший?

В мире искусственного интеллекта каждый год появляются новые технологии, которые меняют наше представление о возможностях машин. Сегодня мы рассмотрим ведущих представителей этой сферы, их особенности и сферы применения.

Главные конкуренты

На сегодняшний день лидируют несколько языковых моделей, каждая из которых выделяется уникальными характеристиками:

ChatGPT (GPT-4) – флагманский продукт от OpenAI, известный своей высокой точностью и гибкостью.

DeepSeek – китайская разработка, специализирующаяся на обработке сложных запросов и генерации кода.

Claude 3.7 – модель от Anthropic, ориентированная на безопасное и логичное взаимодействие.

Qwen – продвинутая система от Alibaba, отлично работающая с китайским и английским языками.

Gemini – продукт Google, глубоко интегрированный в экосистему поисковых технологий.

Какой ИИ лучше?

Выбор идеального инструмента зависит от ваших задач. Рассмотрим, какие модели лучше справляются с различными сценариями:

Здесь лидерами являются ChatGPT и DeepSeek:

ChatGPT (GPT-4) – выдаёт детальные объяснения, помогает отлаживать код и поддерживает большинство популярных библиотек.

DeepSeek – особенно хорош в написании и оптимизации сложных алгоритмов.

Claude 3.7 и ChatGPT отлично справляются с этой задачей:

Claude 3.7 – показывает отличные результаты при анализе больших документов.

ChatGPT – умеет эффективно реферировать и переформулировать тексты.

Gemini и Qwen предлагают высокую скорость обработки запросов:

Gemini – быстро выдаёт ответы благодаря интеграции с Google.

Qwen – оптимизирован для скорости обработки запросов, особенно в англо-азиатском контексте.

Вывод

Выбор лучшего ИИ – это индивидуальный процесс, зависящий от ваших потребностей. Если вам нужен помощник для Python, обратите внимание на ChatGPT или DeepSeek. Для работы с длинными текстами Claude 3.7 станет вашим незаменимым союзником. А для быстрых ответов Gemini и Qwen предложат оптимальное решение.

Какой ИИ вы используете? Поделитесь своим опытом в комментариях!

Показать полностью
Отличная работа, все прочитано!