Python/ django
61.1K subscribers
2.16K photos
92 videos
48 files
2.88K links
по всем вопросам @haarrp

@itchannels_telegram - 🔥 все ит-каналы

@ai_machinelearning_big_data -ML

@ArtificialIntelligencedl -AI

@datascienceiot - 📚

@pythonlbooks

РКН: clck.ru/3FmxmM
加入频道
🚀 Kreuzberg — мощный фреймворк Document Intelligence для Python!

🔹 Извлекает текст, метаданные и структурированные данные из PDF, Office-документов, изображений и др.
🔹 Основан на проверенных open-source решениях: Pandoc, PDFium, Tesseract
🔹 Поддержка 18 форматов (PDF, DOCX, PPTX, HTML, изображения, таблицы и пр.)
🔹 Высокая производительность: 30+ документов/с, лёгкий runtime (≈360 МБ), установка 71 МБ
🔹 Открытый исходный код под MIT-лицензией, 2 000 на GitHub
GitHub

Пример:

from kreuzberg import extract_file

# In your async function
result = await extract_file("presentation.pptx")
print(result.content)

# Rich metadata extraction
print(f"Title: {result.metadata.title}")
print(f"Author: {result.metadata.author}")
print(f"Page count: {result.metadata.page_count}")
print(f"Created: {result.metadata.created_at}")


Попробуйте: https://github.com/Goldziher/kreuzberg

@pythonl

#Python #OCR #DocumentIntelligence #OpenSource #Kreuzberg
🔥95👍3
🖥Тебе не всегда стоит использовать классы в Python

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

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

🔍 Когда вы можете обойтись без класса

1. Хранение простых данных
Вместо класса:


class Point:
def __init__(self, x, y):
self.x = x
self.y = y
point = Point(10, 20)



Point = namedtuple('Point', ['x', 'y'])
point = Point(10, 20)

# или

@dataclass
class Point:
x: int
y: int
point = Point(10, 20)


Статические утилиты без состояния
Вместо:


class Utils:
@staticmethod
def add(a, b): return a + b
result = Utils.add(3, 4)


используйте просто функцию:


def add(a, b): return a + b
result = add(3, 4)

Группировка констант
Вместо использования отдельного класса:


class Config:
HOST = 'localhost'
PORT = 8080

можно определить модуль с константами:


HOST = 'localhost'
PORT = 8080

Простые изменяемые состояния
Если нужен лишь список или словарь:


inventory = []
inventory.append('apple')

Операции на лету
Вместо класса с одним методом transform:



result = Transformer().transform([1,2,3])

используйте:


result = [x*2 for x in [1,2,3]]

Стандартная библиотека может уже всё заменить
Например, configparser, json, csv и другие модули часто покрывают функциональность управления конфигурациями без необходимости писать класс вручную.

Когда классы всё же уместны
Используйте классы, если вам действительно нужны:

- Состояние и поведение, связанные вместе
- Наследование и расширяемость
- Капсуляция логики и данных
- Чёткая структура и переиспользуемость

Но многие простые сценарии проще и понятнее реализовать без OOP-механизмов

💡 Почему это важно
Это помогает избежать избыточного кода и упростить архитектуру

Повышает читабельность, особенно для новичков или в небольших скриптах

Снижает перегрузку инициализации, особенно там, где функциональность тривиальна

📌 Подробнее

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍4🔥1