Case 4. Intelligent navigation over events / timelines
Implementation in pure PHP
Goal: quickly find the most relevant events in a timeline by meaning, not by exact keyword matches. We compute embeddings for event descriptions, cache them to disk, and rank events using cosine similarity against the query.
Example of use
<?php
require_once __DIR__ . '/code.php';
$events = [
[
'id' => 1,
'title' => 'Ограничения против технологических корпораций',
'description' => 'Введены новые экономические меры в отношении крупных технологических компаний.',
],
[
'id' => 2,
'title' => 'Развитие космических программ',
'description' => 'Несколько стран региона увеличили финансирование национальных спутниковых проектов.',
],
[
'id' => 3,
'title' => 'Эскалация политического конфликта',
'description' => 'Обострение конфликта на политической почве в нескольких провинциях.',
],
[
'id' => 4,
'title' => 'Ограничения против ИТ-сектора',
'description' => 'Правительство объявило о новых ограничениях для компаний, работающих в сфере информационных технологий.',
],
[
'id' => 5,
'title' => 'Рост инфляции и пересмотр ключевой ставки',
'description' => 'Центральный банк повысил ключевую ставку на фоне ускорения инфляции и роста цен на импортные товары.',
],
[
'id' => 6,
'title' => 'Запуск программы поддержки малого бизнеса',
'description' => 'Власти объявили о льготных кредитах и налоговых послаблениях для малого и среднего бизнеса в регионах.',
],
[
'id' => 8,
'title' => 'Утечка данных в сфере онлайн-ритейла',
'description' => 'Интернет-магазин расследует утечку персональных данных клиентов после компрометации учётных записей сотрудников.',
],
[
'id' => 9,
'title' => 'Прорыв в медицине: новый метод диагностики',
'description' => 'Исследователи представили метод ранней диагностики заболеваний по биомаркерам, сокращающий время анализа.',
],
[
'id' => 10,
'title' => 'Сезонный рост заболеваемости',
'description' => 'В нескольких городах отмечен рост заболеваемости респираторными инфекциями, клиники усилили приём пациентов.',
],
[
'id' => 12,
'title' => 'Засуха и риски для сельского хозяйства',
'description' => 'Из-за продолжительной засухи фермеры прогнозируют снижение урожайности, обсуждаются меры поддержки аграриев.',
],
[
'id' => 13,
'title' => 'Финал крупного спортивного турнира',
'description' => 'В решающем матче сезона команда одержала победу в дополнительное время, установив новый рекорд по посещаемости.',
],
[
'id' => 14,
'title' => 'Трансфер игрока и усиление состава',
'description' => 'Клуб подписал контракт с новым нападающим, рассчитывая усилить атакующую линию перед серией дерби.',
],
[
'id' => 15,
'title' => 'Новые правила для маркетплейсов',
'description' => 'Регулятор предложил требования к маркировке товаров и прозрачности комиссий на торговых онлайн-платформах.',
],
[
'id' => 17,
'title' => 'Сбои в поставках полупроводников',
'description' => 'Производители электроники предупредили о задержках поставок чипов из-за ограничений экспорта и перегрузки заводов.',
],
[
'id' => 18,
'title' => 'Открытие фестиваля современного искусства',
'description' => 'В столице стартовал фестиваль современного искусства с выставками, перформансами и лекциями художников.',
],
[
'id' => 19,
'title' => 'Крупная сделка на рынке недвижимости',
'description' => 'Инвестфонд приобрёл портфель коммерческой недвижимости, планируя реконструкцию и повышение энергоэффективности.',
],
[
'id' => 20,
'title' => 'Исследование океана и новые данные',
'description' => 'Научная экспедиция собрала данные о течениях и температуре воды, уточнив прогнозы по изменению климата.',
],
];
$query = 'санкции против IT-компаний';
$search = new SemanticEventSearch(topN: 3);
$search->setModel('Xenova/paraphrase-multilingual-MiniLM-L12-v2');
$search->setEvents($events);
$search->setQuery($query);
$out = $search->run();
$search->render($out['query'], $out['results']);
Result:
Memory: 0.001 Mb
Time running: < 0.001 sec.
Query: санкции против IT-компаний
[0.4288] #4 Ограничения против ИТ-сектора
Правительство объявило о новых ограничениях для компаний, работающих в сфере информационных технологий.
[0.3356] #15 Новые правила для маркетплейсов
Регулятор предложил требования к маркировке товаров и прозрачности комиссий на торговых онлайн-платформах.
[0.2598] #8 Утечка данных в сфере онлайн-ритейла
Интернет-магазин расследует утечку персональных данных клиентов после компрометации учётных записей сотрудников.