Модуль:Aggregator Clear
Материал из Поле цифровой дидактики
Модуль используется внутри проекта Статистическое сравнение страниц
- Предполагается, что функции модуля отдают числа, которые далее используются для статистического анализа
local p = {}
local function getArgs(frame)
local args = {}
for k, v in pairs(frame.args) do
if type(v) == 'string' and v ~= '' then
args[k] = mw.text.trim(v)
end
end
return args
end
local function getTitleObject(titleText)
if not titleText or titleText == '' then
return mw.title.getCurrentTitle()
end
return mw.title.new(titleText)
end
local function getContent(titleText)
local titleObj = getTitleObject(titleText)
if not titleObj then
return nil, 'Ошибка: некорректное имя страницы'
end
local content = titleObj:getContent()
if not content then
return nil, 'Ошибка: страница не существует или содержимое недоступно'
end
return content, nil
end
local function countArgs(args)
local n = 0
for _ in pairs(args) do
n = n + 1
end
return n
end
local function countWords(text)
local n = 0
for _ in mw.ustring.gmatch(text, '%S+') do
n = n + 1
end
return n
end
local function countLinks(text)
local n = 0
for _ in mw.ustring.gmatch(text, '%[%[[^%]]+%]%]') do
n = n + 1
end
return n
end
local function countHeadings(text)
local n = 0
for _ in mw.ustring.gmatch(text, '\n==+[^=\n]+==+') do
n = n + 1
end
if mw.ustring.match(text, '^==+[^=\n]+==+') then
n = n + 1
end
return n
end
function p.args(frame)
local args = getArgs(frame)
return 'Всего передано аргументов: ' .. countArgs(args)
end
function p.chars(frame)
local args = getArgs(frame)
local text, err = getContent(args.title)
if not text then
return err
end
return 'Длина исходного вики-текста в байтах: ' .. #text
end
function p.words(frame)
local args = getArgs(frame)
local text, err = getContent(args.title)
if not text then
return err
end
return countWords(text)
end
function p.links(frame)
local args = getArgs(frame)
local text, err = getContent(args.title)
if not text then
return err
end
return 'Количество wikilinks [[...]]: ' .. countLinks(text)
end
function p.headings(frame)
local args = getArgs(frame)
local text, err = getContent(args.title)
if not text then
return err
end
return 'Количество заголовков ==...== : ' .. countHeadings(text)
end
function p.main(frame)
local args = getArgs(frame)
local mode = args.mode or 'args'
if mode == 'args' then
return p.args(frame)
elseif mode == 'chars' then
return p.chars(frame)
elseif mode == 'words' then
return p.words(frame)
elseif mode == 'links' then
return p.links(frame)
elseif mode == 'headings' then
return p.headings(frame)
else
return 'Ошибка: неизвестный режим. Допустимо: args, chars, words, links, headings'
end
end
return p
