🔎 Поисковик на 80 строках кода
|
Публикация рассказывает, как сделать базовую поисковую систему буквально на 80 строках Python-кода. Автор последовательно реализовал все основные компоненты поисковика: - Краулер – собирает и сохраняет данные с разных сайтов. Автор использовал блоги и RSS-ленты, которые читает. Также он оптимизировал работу краулера с помощью асинхронности в Python.
- Инвертированный индекс – структура данных, которая для заданных ключевых слов хранит список документов, где эти слова встречаются. Это позволяет быстро искать нужные документы. Этот компонент реализован с помощью словарей.
- Ранжировщик – сортирует найденные документы по релевантности запросу. В проекте использован алгоритм BM25.
- Интерфейс – простое веб-приложение на базе FastAPI для взаимодействия пользователя с поисковой системой.
Вспомогательные компоненты, которые обычно используются в поисковиках, обсуждаются в заключении. Хотя это только PoC, проект дает отличное представление о принципах работы реальной поисковой системы. |
Web2PDF – CLI-инструмент для конвертации веб-страниц (по URL) в PDF-файлы. Поддерживает пакетную обработку множества ссылок и предоставляет все возможности по кастомизации внешнего вида документов: можно настроить все – от типа и размера шрифта до фонового цвета и размера страниц. |
Работать с Web2PDF очень просто |
PyPDFForm – автоматизирует работу с PDF-формами: - инспектирует формы и заполняет нужные поля значениями из словарей;
- вставляет изображения в существующие документы;
- извлекает и объединяет отдельные страницы документа;
- создает подмножества виджетов и полей в существующих PDF-формах.
|
Заполнение формы из Python-словаря |
Rexi – инструмент для работы с регулярными выражениями в терминале. Основные возможности: - Интерактивный пользовательский интерфейс на базе библиотеки textual.
- Поддержка двух режимов: match и finditer для применения regex.
- Мгновенная визуализация результатов применения regex к входным данным.
- Простота использования – запуск одной командой, чтение данных из stdin.
Работает так: - Запускаешь rexi из терминала.
- Вводишь регулярное выражение в специальное поле.
- Выбираешь режим match или finditer.
- Сразу видишь результат применения regex к входным данным из stdin.
|
Skorche – библиотека для простого управления всевозможными заданиями. Поддерживает параллельное и асинхронное выполнение задач. Django HTMX Components – набор готовых компонентов, которые можно скопировать и вставить в Django-приложение. |
🕹️ Управление зависимостями |
Когда пора переходить с requirements.txt на Poetry? |
Файл requirements.txt и Poetry решают похожие задачи по управлению зависимостями в Python-проектах, но возможностей у Poetry, разумеется, намного больше: - Для небольших учебных и практических проектов вполне достаточно requirements.txt. Это простой текстовый файл, который легко читать и редактировать.
- Если нужна переносимость кода между системами и командами разработчиков – лучше подходит Poetry. Он гарантирует идентичные окружения и версии библиотек на разных машинах.
- Poetry идеально подходит для больших проектов со множеством зависимостей, которые нужно четко разделять между средами разработки, тестирования и продакшена.
- Если нужно автоматизировать сборку проекта в пакеты, Poetry – оптимальный выбор.
Туториал покажет, как перейти на Poetry: - На примере небольшого проекта показываются все основные команды Poetry (создание структуры проекта, установка и удаление зависимостей, генерация файла блокировки версий и т. д.)
- Рассказывается про файл pyproject.toml, который заменяет традиционный requirements.txt и позволяет лучше управлять зависимостями.
|
Rye – новейшая альтернатива Poetry. Этот инструмент создал автор Flask – Армин Ронахер. Как и другие новомодные штуки, Rye написан на Rust, и делает все то же самое, что и Poetry, но проще и быстрее, плюс управляет версиями самого Python. |
«Гарри Поттер и движок Elasticsearch» – это семантическая поисковая система на основе векторной базы данных с информацией о вселенной Гарри Поттера: - В первой части создается индекс в Elasticsearch, где каждый документ – это персонаж со своими атрибутами. Этот индекс можно использовать для поиска персонажей по разным критериям.
- Во второй части подключается клиент для работы с Elasticsearch. Создается индекс на основе сценария первого фильма про Гарри Поттера. Используются модели Hugging Face для анализа тональности текста и построения векторных представлений слов. Комбинируя разные модели, можно делать более сложные семантические поисковые запросы и сравнивать с встроенными возможностями Elasticsearch. Процесс подключения и работа с Elasticsearch подробно описаны в этой статье.
- В третьей части с помощью Flask создается простое веб-приложение как интерфейс для поиска – подробное описание процесса приведено здесь. Также вводится новый индекс для хранения истории поисковых запросов.
|
Видеотуториал покажет, как сделать чат-бота, имитирующего стиль Эминема. Это очень простой проект для начинающих на основе Streamlit, Langchain и OpenAI API. Демо-проекта работает здесь (приходите со своим OpenAI-ключом), а весь исходный код находится в репозитории. |
🎨 Визуализация результатов тестирования с помощью Rich |
Автор статьи столкнулся с необходимостью отладить сложный код финансовых расчетов, перенесенный из старого приложения ColdFusion. Изначально разработчик использовал стандартный вывод pytest для чисел, но читать такой вывод было неудобно и утомительно. |
Сравнивать числа при стандартном выводе совершенно неудобно |
Проблему решил табличный вывод с помощью библиотеки Rich: - Таблицы значительно ускоряют визуальное сравнение значений.
- Если выделить красным цветом разницу между ожидаемыми и фактическими значениями, а совпадения сделать зелеными – дело идет еще быстрее.
|
Вывод результатов тестирования в таблицах Rich |
🎥 Видеокурс по созданию и деплою фуллстек-приложения |
9-часовой курс во всех подробностях покажет разработку и развертывание Django-приложения. Основные этапы: - Процесс создания контент-платформы на базе Django, PostgreSQL и облачного хранилища Amazon S3. На фронтенде используются Tailwind и HTMX.
- Упаковка приложения в Docker-контейнер.
- Деплой в Kubernetes – настройка переменных окружения, секретов, сетевых подключений.
|
На этом все, увидимся через неделю! |
|
|
Вы получили это письмо, потому что подписались на нашу рассылку. Если вы больше не хотите получать наши письма, нажмите здесь.
|
|
|
|