Нужно написать микро-приложение, делающее выборку (копирование статей) из wikipedia во внутреннюю БД, с возможностью дальнейшей навигации и поиска по скопированным статьям:
Интерфейс системы состоит из двух вкладок (импорт статей и поиск). Вкладки должны переключаться между собой без перезагрузки страницы.
-
После ввода ключевого слова и нажатии кнопки «Скопировать» должен производиться запрос к сайту wikipedia.org c поиском статьи по соответствующему слову/словосочетанию (для простоты примем, что оно полностью совпадает с названием статьи в Wikipedia). Запрос и копирование контента может производится любыми спобосами в т.ч. используя MediaWiki API.
-
Если целевая статья найдена, то нужно скопировать голый текст статьи (plain text) без тегов в собственную БД с последующим разбором на слова-атомы (любое сочетание символов без пробелов и знаков препинания). Эти данные потребуются для осуществления поиска по ключевому слову (см. ниже).
-
После завершения обработки нужно вывести итоговую информацию и добавить строчку в результирующую таблицу, которая содержит все статьи, скопированные из wikipedia. Данная таблица показывается при первом заходе в систему и должна обновляться без перезагрузки страницы.
-
Поиск должен работать по внутренней БД на основе слов-атомов содержащихся в статье (учитывается точное совпадение, морфология не нужна). Слова-атомы должны храниться в отдельной таблице, связь со статьями осуществляется через специальную связующую таблицу (ID слова, ID статьи, Кол-во вхождений). Результаты поиска выдаются в порядке убывания кол-ва вхождений ключевого слова в статье.
-
Под словом атомом подразумевается любая последовательность символов [a-Zа-Я0-9]. Для примера, во фразе: «Юрий Гагарин полетел в космос в 1961 году» будут следующие атомы: юрий, гагарин, полетел, в, космос, 1961, году.
-
При клике на заголовок статьи, ее содержимое должно открывается в блоке справа (без перезагрузки страницы и без использования iframe).
Обязательно использование следующих библиотек и приемов:
соблюдение принципа MVC MySQL: таблицы innodb c внешними ключами скрипты должны нормально работать на PHP 8.1+ (без вывода каких-либо ошибок при error_reporting = E_ALL)
Данное требования не обязательное, но плюсом будет реализация системы на любом php-фреймворке (если есть опыт, то можно взять полноценный фреймворк типа Laravel, если опыта не достаточно, то совет - использовать микро-фреймворк или нативный подход без фреймфорка). Также одними из оценочных параметров будут:
Внешний вид интерфейса, никакой графики рисовать не нужно, но хорошая блочная верстка с соблюдением правил типографики и аккуратным внешним видом будет большим преимуществом. Возможно использование css-фреймворков (как вариант, bootstrap или tailwindcss).
Аккуратный код (форматирование кода, поддержка стандарта кодирования PSR, комментарии к коду phpdoc). Это один из наиболее важных критериев, просьба обратить на него внимание.
Готовое приложение должно быть выложено на любой из хостингов и доступно для публичного просмотра.
Стек: PHP 8.2, Laravel 10, Vue.js, Tailwind