Как превратить Википедию в бесконечную ленту соцсетей
Поймал себя на мысли, что чтение Википедии часто превращается в бесконечный квест по гиперссылкам. Начинаешь со статьи про квантовую физику, а через час обнаруживаешь себя на странице о видах австралийских пауков. Разработчик под ником rebane2001 решил довести этот процесс до абсолюта и создал xikipedia — проект, который упаковывает свободную энциклопедию в формат бесконечной ленты в духе TikTok или запрещенных соцсетей.
Что это такое и зачем оно нужно
Xikipedia — это веб-приложение (PWA), которое берет статьи из Simple Wikipedia и подсовывает их пользователю одну за другой. Главная фишка здесь не в самом контенте, а в алгоритме рекомендаций. Автор хотел показать, что даже простая математическая модель без использования тяжелых нейросетей и сбора данных о миллионах пользователей может отлично угадывать ваши интересы.
Вся магия происходит прямо в браузере. Никакие данные об «лайках» или прокрутках не улетают на сервер. Это полностью локальная история, которая работает даже без интернета, если вы один раз загрузили базу.
Как работает «движок» интересов
В основе лежит довольно прозрачная система начисления баллов. Каждая статья в Википедии имеет дерево категорий и ссылки на другие страницы. Алгоритм использует их как теги для профилирования ваших предпочтений.
Система оценивает ваши действия в баллах:
- Просто проскроллили пост? Получите -5 баллов к категориям этой статьи.
- Поставили лайк? +50 баллов (и бонус за то, как давно вы не лайкали ничего другого).
- Кликнули на статью, чтобы почитать подробнее? +75 баллов.
- Открыли картинку? +100 баллов.
Когда приходит время показать следующий пост, система выбирает 10 000 случайных статей из базы и применяет к ним веса. С вероятностью 42% вам покажут самый релевантный контент, в 40% случаев — случайный выбор с учетом весов (взвешенный рандом), а в оставшихся 18% — абсолютно случайную статью, чтобы лента не превратилась в «эхо-камеру» и вы могли наткнуться на что-то кардинально новое.
Техническая начинка
Проект написан на чистом HTML и JavaScript. Для работы с данными используется огромный JSON-файл, который содержит выжимку из дампов Википедии. В репозитории уже есть готовый файл для Simple Wikipedia, но автор предусмотрительно оставил скрипт process_data.py. С его помощью можно скормить системе любой WikiMedia дамп и собрать свою тематическую «соцсеть», например, только по историческим фактам или компьютерным играм.
Интересно реализована работа с офлайном. Благодаря Service Workers приложение весит прилично из-за базы данных, но зато открывается мгновенно и работает в самолете или метро. Есть поддержка темной и светлой тем, статистика использования и управление профилями. Можно завести один профиль для изучения точных наук, а другой — для чтения странных фактов о животных, и алгоритмы не будут перемешиваться.
Почему это стоит потыкать
Для разработчика xikipedia — это отличный пример того, как делать рекомендательные системы «на коленке». Мы привыкли, что для рекомендаций нужны терабайты данных и кластеры с GPU, но здесь всё работает на простых коэффициентах и базовой логике.
Что можно почерпнуть из кода:
- Реализация бесконечного скролла на PWA.
- Локальное хранение и обработка больших объемов данных в браузере.
- Логика весовых коэффициентов для контента.
Конечно, проект не лишен нюансов. Например, категории вроде «имена» или «фамилии» настолько часто встречаются в статьях, что автору пришлось вручную прописать им огромный отрицательный рейтинг в -1000 баллов на старте, иначе лента быстро забивалась бы биографиями малоизвестных личностей.
Практическая польза
Помимо того, что это просто «убийца времени» с пользой для мозга, xikipedia можно использовать как базу для своих проектов. Если вам нужно быстро набросать прототип приложения с лентой новостей или рекомендациями, механика из этого репозитория переносится в любой проект за вечер.
Попробовать живое демо можно на xikipedia.org. Только осторожно: можно легко выпасть из реальности на пару часов, изучая статьи о том, как устроены паровые двигатели или почему небо синее, пока алгоритм усердно подсовывает вам всё более интересные факты.
Если решите запустить проект локально или собрать свою базу, загляните в process_data.py. Там простая логика парсинга XML-дампов Википедии, которую легко адаптировать под свои нужды. Проект распространяется под лицензией AGPLv3, так что для открытых инструментов это отличный фундамент.
