🚀 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
Пример:
✨ Попробуйте: https://github.com/Goldziher/kreuzberg
@pythonl
#Python #OCR #DocumentIntelligence #OpenSource #Kreuzberg
🔹 Извлекает текст, метаданные и структурированные данные из 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
🔥9❤5👍3
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