Модуль:Aggregator Clear

Материал из Поле цифровой дидактики
Версия от 11:07, 19 мая 2026; Patarakin (обсуждение | вклад) (Новая страница: «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 =...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Модуль используется внутри проекта Статистическое сравнение страниц

  • Предполагается, что функции модуля отдают числа, которые далее используются для статистического анализа


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