Feedius — свободная система мониторинга и анализа новостей
Feedius — программный комплекс, позволяющий собирать, хранить и анализировать большие потоки новостей из RSS-лент. Новости отфильтровываются под ваши интересы и приходят на email, либо доступны через специально сформированную RSS-ленту, либо их можно почитать в браузере.
Фидиус состоит из следующих подсистем:
Загрузчик новостей
Загрузчик представляет собой фоновый процесс, который с заданной периодичностью пробегается по вашей RSS-подписке и проверяет обновления. Найденные новости складываются в Postgres для хранения. Как я уже написал выше, система ориентирована именно на большие объемы (от 10-20 тыс новостей в неделю и до бесконечности). Этим объясняется выбор Postgres. Кроме того, загрузчик лент имеет мультипотоковую архитектуру, чтобы успевать обработать большое количество лент за указанный пользователем период обновления. Вы можете задать любое количество рабочих потоков, с учетом вычислительных возможностей своего компьютера, разумеется.
Для пользователя процесс сбора новостей не заметен — вы просто работаете на компьютере (или не работаете, если Фидиус запущен на выделенном сервере), а база данных постоянно пополняется, чтобы пользователь в любой момент имел возможность подключиться к ней через Web-интерфейс и сделать выборку по интересующей его теме.
Web-интерфейс
Для доступа к новостям продвинутые пользователи могут использовать командную строку. Для гуманитариев имеется удобный Web-интерфейс под названием Feedius Panel, позволяющий работать с новостями прямо из браузера.
Анализатор
Подсистема анализа имеет модульную структуру. К уже имеющимся модулям обработки данных вы можете добавлять свои. Примеры штатных модулей: модуль ретроспективного контент-анализа (РКА), модуль декомпозиции, модуль прогнозирования интереса к теме и т.д.
Например, РКА позволяет выбрать любого персонажа или бренд, или географическое название и посмотреть, в каком контексте оно упоминается в новостях. Затем строится график изменения контекста по времени. Таким образом, можно отследить как меняется отношение к тому или иному объекту.
Модуль декомпозиции позволяет разложить данные о популярности новостной темы на три составляющие: тенденцию, сезонный фактор и случайные флуктуации.
Этот вид анализа помогает обнаружить т.н. «вбросы» или заранее написать статью по теме, которая сегодня никому не интересна, а завтра станет популярной.
Модуль прогнозирования позволяет (при определенных условиях) предсказать изменение интереса к теме путем моделирования (алгоритм ARIMA и др.).
Ну и так далее. Читатель, наверное, уже догадался, что расширения пишутся на языке R, чтобы задействовать впечатляющий потенциал этого замечательного языка программирования.
Как выглядит работа с Feedius
Сначала нужно инициализировать базу данных (создать схему и установить значения по умолчанию):
init/database/init.rb
Теперь нужно перенести свои драгоценные ленты, нажитые непосильным трудом, в Фидиус. Общепринятым форматом для импорта/экспорта RSS-подписок является OPML. Сохраняем ленты в нем и затем импортируем в Фидиус:
tools/opmlimport.rb <путь к opml-файлу>
Вот и все, новости уже собираются. По желанию можно настроить интервал обновления, количество потоков и т.д.:
nano global/globalconf.rb
Теперь можно начать работать с новостями. Запустим обслуживающий web-сервер:
service feediuspanel start
Чтобы не конфликтовать с основным Web-сервером, Feedius Panel использует локальный порт 5001. То есть, адрес для работы будет такой: http://127.0.0.1:5001. Если Фидиус установлен на выделенном сервере, рекомендуется использовать обратный прокси. Конфигурационный файл для Nginx будет выглядеть так:
upstream feedius {
server 127.0.0.1:5001;
}
server {
listen 80;
server_name feedius;
location / {
proxy_pass http://feedius;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Теперь Фидиус доступен из любой точки в интернете, как обычный сайт.
Для примера рассмотрим отбор новостей для сайта. Для этого нужно выяснить, что вообще интересует читателей. Недавно я проделал такой анализ для Либератума, с результатами которого можно ознакомиться здесь. Читателей Либератума больше всего интересуют новости об Ubuntu, но не все, а со словом «как» в заголовке (инструкции по установке, настройке или улучшению чего-либо в Ubuntu). Составим поисковый профиль и опишем его на языке SQL. Гуманитарии могут воспользоваться конструктором запросов, однако он несколько сужает те возможности, которые дарит нам SQL. Но для простых запросов вполне сгодится. Итак:
select title from news where title ilike '%ubuntu%' and title ilike '%how%' order by published desc limit 1;
Переводя с SQL на русский, от Postgres требуется найти самую свежую статью из тех, которые содержат в заголовке слова «Ubuntu» и «How» (как). Получаем: «How to Run Android Apps with App Runtime for Chrome (ARC) Welder in Ubuntu» (Как запустить приложение для Android в Ubuntu).
Так что же, теперь описывать каждый раз области своих интересов на SQL? Нет. Даем запросу имя и он сохраняется в базе данных:
Теперь этот запрос можно использовать, ссылаясь на него по названию. Система будет периодически выполнять пользовательские запросы и выдавать результат одним из способов: на email, через web или сформирует ленту RSS, на которую пользователь может подписаться своей привычной RSS-читалкой.
Эпилог
Как некоторые уже догадались, этот прекраснейший программный продукт разработан мною для себя, но скоро будет выложен на Гитхаб в свободный доступ (за исключением некоторых модулей аналитики). Мой подарок всей прогрессивной общественности. Следите за новостями.
Комментарии
Чингачгук
26 августа, 2018 - 07:03
Какой адрес программы на Гитхабе?
Комментировать