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 и комментариям. На будущее есть идея добавить в него анализ контента с дальнейшими категориями.

Если кому-то интересно, весь код проектов, о которых идет речь, размещен у меня в свободном доступе на GitHub и GitVerse.

Начать дискуссию