Программирование (syllabus) 2026/Task/Aggregator
Программирование/Задание:Aggregator
- Это учебное задание посвящено работе с Lua-модулем Module:Aggregator в среде MediaWiki + Scribunto.
Идея задания
Используем готовый модуль Module:Aggregator как базовый объект для remix. Сначала мы вызываем готовые функции модуля на wiki-странице. Затем каждый студент создаёт свой собственный remix-модуль, добавляя новые режимы анализа.
Идея задания состоит в том, что страница wiki становится данными, а Lua-модуль становится инструментом их анализа и представления. На сайте уже существует модуль: Module:Aggregator. Этот модуль умеет работать в нескольких режимах:
| Режим | Что делает |
|---|---|
args
|
считает количество переданных аргументов |
chars
|
считает длину исходного вики-текста страницы |
words
|
считает количество слов в исходном вики-тексте страницы |
links
|
считает количество wiki-ссылок вида [[...]]
|
headings
|
считает количество заголовков вида == ... ==
|
Часть 1. Попробуйте готовый модуль
Сначала попробуйте использовать уже готовый модуль Module:Aggregator.
Пример 1. Подсчёт аргументов
Вызов:
{{#invoke:Aggregator|main|mode=args|a=Lua|b=SMW|c=NetLogo}}
Результат:
Всего передано аргументов: 4
Пример 2. Подсчёт длины страницы
Вызов:
{{#invoke:Aggregator|main|mode=chars|title=Lua}}
Результат:
Длина исходного вики-текста в байтах: 5813
Пример 3. Подсчёт слов на странице
Вызов:
{{#invoke:Aggregator|main|mode=words|title=Lua}}
Результат:
Количество слов в исходном вики-тексте: 565
Пример 4. Подсчёт wiki-ссылок
Вызов:
{{#invoke:Aggregator|main|mode=links|title=Lua}}
Результат:
Количество wikilinks ...: 18
Пример 5. Подсчёт заголовков
Вызов:
{{#invoke:Aggregator|main|mode=headings|title=Lua}}
Результат:
Количество заголовков ==...== : 8
Что важно понять
Модуль Module:Aggregator анализирует исходный wiki-текст страницы. Это значит, что он работает с текстом разметки, шаблонами, ссылками и заголовками как с данными.
Поэтому один и тот же вопрос можно понимать по-разному:
| Вопрос | Что фактически считает модуль |
|---|---|
| Сколько слов на странице? | Сколько слов в исходном wiki-тексте |
| Сколько символов на странице? | Длину строки исходного текста |
| Сколько ссылок на странице? | Количество конструкций [[...]]
|
| Сколько заголовков на странице? | Количество строк или фрагментов вида == ... ==
|
Часть 2. Создайте свой remix
Задача — не просто использовать готовый модуль, а сделать собственный remix.
Создайте личный модуль, например:
Module:Student/Smirnov/Aggregator- предпочтителен вариант с подстраницами, потому что он лучше организует пространство имён.
Что нужно сделать в remix
В вашем remix-модуле должно быть:
- не меньше 2 новых режимов по сравнению с исходным Module:Aggregator;
- страница документации
/doc; - страница демонстрации, на которой показаны примеры вызова вашего модуля;
- короткое объяснение, что именно делает ваш remix.
Возможные направления remix
| Новый режим | Идея | Что анализировать |
|---|---|---|
templates
|
считать шаблоны | количество конструкций {{...}}
|
categories
|
считать категории | количество вхождений [[Категория:...]]
|
externallinks
|
считать внешние ссылки | ссылки вида http:// и https://
|
files
|
считать файлы | вхождения [[Файл:...]]
|
sentences
|
считать предложения | количество предложений в тексте |
paragraphs
|
считать абзацы | количество текстовых блоков |
tables
|
считать таблицы | количество wiki-таблиц |
Часть 3. Создайте страницу демонстрации
После создания вашего remix-модуля создайте отдельную страницу демонстрации, в категории Категория:Работы МФ-221 например:
- Придумать название!!!
На этой странице нужно показать:
- название вашего модуля;
- список новых режимов;
- не меньше 3 примеров вызова;
- краткое объяснение результатов.
Рекомендуемая структура demo-страницы
= AggregatorDemo =
== Мой модуль ==
[[Module:Student/Иванов/Aggregator]]
== Новые режимы ==
* templates
* categories
== Примеры ==
{{#invoke:Student/Иванов/Aggregator|main|mode=templates|title=Lua/Tutorial}}
{{#invoke:Student/Иванов/Aggregator|main|mode=categories|title=Lua/Tutorial}}
== Комментарий ==
Мой remix считает шаблоны и категории в исходном wiki-тексте страницы.
Часть 4. Документация
У вашего модуля должна быть страница документации:
Module:Student/Иванов/Aggregator/doc
На странице /doc должно быть:
| Что должно быть | Обязательно? |
|---|---|
| краткое описание модуля | да |
| список режимов | да |
| примеры вызова | да |
| описание новых режимов | да |
| указание автора remix | да |
Минимальные требования
| Требование | Минимум |
|---|---|
| Личный remix-модуль | 1 |
| Новые режимы | 2 |
| Примеры вызова на demo-странице | 3 |
| Страница /doc | 1 |
| Рабочий вызов без ошибок | обязательно |
Критерии оценки
| Критерий | Что оценивается |
|---|---|
| Работоспособность | модуль запускается без Lua error |
| Понятность кода | читаемые имена функций и режимов |
| Качество remix | есть собственные новые режимы, а не только переименование |
| Документация | есть /doc и примеры вызова |
| Демонстрация | есть отдельная страница с результатами |
| Интерпретация | студент понимает, что именно считает модуль |
Вопросы для размышления
После выполнения задания ответьте письменно на 3 вопроса:
- Чем отличается исходный wiki-текст страницы от её визуального отображения?
- Что именно считает ваш модуль?
- Что в вашем remix является новой функцией, а что — только изменением оформления?
PlantUML-схема задания

Что сдавать
Итогом задания являются 3 объекта:
- ваш личный remix-модуль;
- страница документации
/doc; - страница демонстрации с примерами вызова.
Формула задания
Use → Understand → Remix → Document → Demonstrate
Дополнительная идея
Если базовый remix выполнен успешно, можно сделать второй уровень и превратить агрегатор из простого счётчика в модуль, который не только считает, но и строит таблицу с результатами анализа нескольких страниц.
Например:
- сравнить 3 страницы по числу слов;
- сравнить 3 страницы по числу ссылок;
- сравнить 3 страницы по числу заголовков.
