FireFeed — RSS-парсер и AI-агрегатор новостей в одном pet-проекте
Привет! Меня зову Юрий, и я рад поделиться с вами историей и идеей своего очередного "pet-проекта по вечерам". Как человек, который давно работает с технологиями и новостями, я всегда искал способ, который помог бы эффективно отделять важное от шума и экономить время на получение свежей информации.
Так родилась идея умного агрегатора новостей, а тут еще и в ногу со временем удается подвязывать его с искусственным интеллектом.
О проекте FireFeed
В современном мире нас ежедневно атакует огромный поток новостей из разных источников и на разных языках. У многих просто нет времени мониторить десятки сайтов и каналов, пытаясь понять, что действительно важно. Проект не просто просто копирует новости — он объединяет похожие материалы, дополняет их и делает удобные для восприятия сводки.
Куда же без ИИ? AI-компоненты в проекте
Сразу стоит заметить, что весь проект реализован на Python - поскольку на нем сейчас наибольшее количество открытых библиотек и моделей, которые легко качаются через Hugging Face.
Если представить весь процесс обработки материалов парсером, схема будет такая:
Обнаружение дубликатов: Проблема и решение
Одна из самых сложных задач — избежать дубликатов. Один и тот же материал может появиться в разных лентах с разными заголовками, слегка переписанным текстом или просто с разными URL. Простое сравнение строк не работает. FireFeed решает это через семантический анализ. Анализатор реализован через модель и работу с эмбеддингами:
- Sentence Transformers: Используется модель paraphrase-multilingual-MiniLM-L12-v2. Эта модель преобразует текст (заголовок + начало содержимого) в вектор (в данном случае 384-мерный), отражающий его смысл.
- pgvector: PostgreSQL с этим расширением позволяет хранить эти векторы и эффективно находить похожие (через косинусное сходство) с помощью специализированных индексов (например, ivfflat).
- Алгоритм: При поступлении новой новости, система генерирует её эмбеддинг и ищет в базе существующие эмбеддинги, косинусное сходство с которыми превышает определённый порог. Если дубликат найден, новость отбрасывается или помечается.
По итогу парсер умеет фильтровать не только точные копии, но и переформулированные версии одной и той же новости, порой значительно улучшая качество читаемого контента.
И в заключение...
FireFeed — для меня это не просто код. Это код, который мне впервые не жалко дважды - во-первых потому, что я потратил на него не много времени, а во вторых - он уже нанес мне пользы и спасает от чтения кучи источников, надеюсь нанесёт и вам. В целом, считаю вышла неплохая попытка решить одну из проблем современности в виде избытка информации.
Бонусом помимо RSS-парсера на днях накидал веб-скраппер и буду рад вашим конструктивным issues и комментариям. На будущее есть идея добавить в него анализ контента с дальнейшими категориями.