Moduł:statystyka: Różnice pomiędzy wersjami
[wersja przejrzana] | [wersja przejrzana] |
szerokosc kolumn |
m zapomnialem o jeszcze tych nawiasach |
||
Linia 226: | Linia 226: | ||
return pagesInCategory( lang .. ' (' .. name .. ')', 'pages' ) |
return pagesInCategory( lang .. ' (' .. name .. ')', 'pages' ) |
||
else |
else |
||
return traverseIndexes( 'terms', name ) |
return ( traverseIndexes( 'terms', name ) ) |
||
end |
end |
||
end |
end |
Wersja z 02:25, 23 wrz 2019
Użycie
Moduł obsługujący rankingi na stronie Wikisłownik:Statystyka oraz szablony liczników. Dane pochodzą ze zrzutów bazy danych ukazujących się dwa razy w miesiącu, analizowanych przez bota i kompilowanych w formacie JSON dla wykorzystania przez niniejszy moduł. Zestawienie uwzględnia wyłącznie wprowadzone języki (tj. z indeksem) z niezerową liczbą haseł w momencie wykonania zrzutu, natomiast zliczane hasła powinny być dostosowane do szablonu.
Schemat JSON
Schemat danych JSON:
currentDate
,previousDate
– odpowiednio data obecnego i poprzedniego zrzutu w formacie yyyyMMddoverall
– statystyki ogólne dla wszystkich językówoverallDiff
– statystyki ogólne, porównanie względem poprzedniego zrzutulanguages
– statystyki dla poszczególnych języków, kluczem jest nazwa krótka języka
Bot zbiera następujące informacje (dla każdego języka oraz w podsumowaniu ogólnym):
entries
– całkowita liczba hasełcanonical
– liczba haseł zawierających definicjenonCanonical
– liczba haseł zawierających formy fleksyjnedefinitions
– liczba definicjiwithFiles
– liczba haseł zawierających co najmniej jedną ilustrację pod nagłówkiem sekcjiwithAudio
– liczba haseł zawierających co najmniej jedno nagranie wymowy w polu „wymowa”withReferences
– liczba haseł zawierających co najmniej jeden przypis w formie <ref> gdziekolwiek w haśle oraz <references> w polu „źródła”combinedLength
– łączna suma długości haseł w znakach (zob. objaśnienie w WS:STAT#Długość haseł)
Jeżeli wykryje różnice względem poprzedniego zrzutu, odzwierciedla je w odpowiednich właściwościach o takiej samej nazwie z dodaniem przyrostka „Diff”. Przykładowo definitionsDiff
ukazuje liczbę znaczeń dodanych lub usuniętych od poprzedniego zrzutu. Jeżeli ta liczba jest równa zeru, właściwość zostaje pominięta.
Opis funkcji
Sposób wywołania: {{#invoke:statystyka|<funkcja>|<parametry>}}
.
mainRanking
Generuje tabelę z zestawieniem języków z największą liczbą haseł (WS:STAT#Języki). Dodatkowe kolumny: liczba znaczeń.
Parametry:
1
(opcjonalny): liczba języków do wyświetlenia; jeżeli jest pusty, wyświetla wszystkie języki oraz podsumowanie w stopce tabeli
Przykłady:
{{#invoke:statystyka|mainRanking|50}}
– tabela zestawiająca 50 języków z największą liczbą haseł{{#invoke:statystyka|mainRanking}}
– tabela zestawiająca wszystkie języki w projekce z podsumowaniem
combinedLengthRanking
Generuje tabelę z zestawieniem języków z największą sumą długości haseł (WS:STAT#Długość haseł). Dodatkowe kolumny: różnica sumy długości względem poprzedniego zrzutu, średnia długość hasła, różnica średniej długości hasła, liczba haseł.
Parametry:
1
(opcjonalny): liczba języków do wyświetlenia; jeżeli jest pusty, wyświetla wszystkie języki oraz podsumowanie w stopce tabeli2
(opcjonalny): główny klucz sortowania (zob. #Schemat JSON); jeżeli dodano przyrostekRate
, kluczem będzie wynik dzielenia wskazanej właściwości (bez przyrostka) przez liczbę haseł; domyślnie suma długości haseł3
(opcjonalny): filtr minimalnej liczby haseł; domyślnie zero
Przykłady:
{{#invoke:statystyka|combinedLengthRanking}}
– tabela zestawiająca wszystkie języki w projekcie z podsumowaniem{{#invoke:statystyka|combinedLengthRanking|50}}
– tabela zestawiająca 50 języków z największą sumą długości haseł{{#invoke:statystyka|combinedLengthRanking|50|definitions}}
– tabela zestawiająca 50 języków z największą sumą długości haseł, posortowana wg liczby znaczeń w kolejności malejącej{{#invoke:statystyka|combinedLengthRanking|50|combinedLengthRate}}
– tabela zestawiająca 50 języków z największą sumą długości haseł, posortowana wg średniej długości haseł w kolejności malejącej{{#invoke:statystyka|combinedLengthRanking|50|combinedLengthRate|500}}
– tabela zestawiająca 50 języków z największą sumą długości haseł, posortowana wg średniej długości haseł w kolejności malejącej, z ograniczeniem do języków liczących 500 haseł lub więcej
definitionsRanking
Generuje tabelę z zestawieniem języków z największą liczbą znaczeń (WS:STAT#Znaczenia). Dodatkowe kolumny: różnica liczby znaczeń względem poprzedniego zrzutu, średnia znaczeń na hasło, różnica średniej znaczeń, liczba haseł.
Parametry:
1
(opcjonalny): liczba języków do wyświetlenia; jeżeli jest pusty, wyświetla wszystkie języki oraz podsumowanie w stopce tabeli2
(opcjonalny): główny klucz sortowania (zob. #Schemat JSON); jeżeli dodano przyrostekRate
, kluczem będzie wynik dzielenia wskazanej właściwości (bez przyrostka) przez liczbę haseł; domyślnie liczba znaczeń3
(opcjonalny): filtr minimalnej liczby haseł; domyślnie zero
Przykłady:
{{#invoke:statystyka|definitionsRanking}}
– tabela zestawiająca wszystkie języki w projekcie z podsumowaniem{{#invoke:statystyka|definitionsRanking|50}}
– tabela zestawiająca 50 języków z największą liczbą znaczeń{{#invoke:statystyka|definitionsRanking|50|combinedLength}}
– tabela zestawiająca 50 języków z największą liczbą znaczeń, posortowana wg sumy długości haseł w kolejności malejącej{{#invoke:statystyka|definitionsRanking|50|definitionsRate}}
– tabela zestawiająca 50 języków z największą liczbą znaczeń, posortowana wg średniej liczby znaczeń na hasło w kolejności malejącej{{#invoke:statystyka|definitionsRanking|50|definitionsRate|500}}
– tabela zestawiająca 50 języków z największą liczbą znaczeń, posortowana wg średniej liczby znaczeń na hasło w kolejności malejącej, z ograniczeniem do języków liczących 500 haseł lub więcej
miscellaneaRanking
Generuje tabelę z zestawieniem haseł z ilustracjami, z nagraniem wymowy oraz ze źródłem dla języków z największą liczbą haseł (WS:STAT#Multimedia i źródła). Dodatkowe kolumny: stosunek haseł ze wskazaną właściwością do całkowitej liczby haseł, różnica względem poprzedniego zrzutu.
Parametry:
1
(opcjonalny): liczba języków do wyświetlenia; jeżeli jest pusty, wyświetla wszystkie języki oraz podsumowanie w stopce tabeli2
(opcjonalny): główny klucz sortowania (zob. #Schemat JSON); jeżeli dodano przyrostekRate
, kluczem będzie wynik dzielenia wskazanej właściwości (bez przyrostka) przez liczbę haseł; domyślnie liczba haseł3
(opcjonalny): filtr minimalnej liczby haseł; domyślnie zero
Przykłady:
{{#invoke:statystyka|miscellaneaRanking}}
– tabela zestawiająca wszystkie języki w projekcie z podsumowaniem{{#invoke:statystyka|miscellaneaRanking|50}}
– tabela zestawiająca 50 języków z największą liczbą haseł{{#invoke:statystyka|miscellaneaRanking|50|definitions}}
– tabela zestawiająca 50 języków z największą liczbą haseł, posortowana wg średniej liczby znaczeń w kolejności malejącej{{#invoke:statystyka|miscellaneaRanking|50|definitionsRate}}
– tabela zestawiająca 50 języków z największą liczbą haseł, posortowana wg średniej liczby znaczeń w kolejności malejącej{{#invoke:statystyka|miscellaneaRanking|50|definitionsRate|500}}
– tabela zestawiająca 50 języków z największą liczbą haseł, posortowana wg liczby znaczeń w kolejności malejącej, z ograniczeniem do języków liczących 500 haseł lub więcej
languageIndex
Generuje indeks języków na stronie głównej.
Parametry:
1
(wymagany): lista najniższych niepodzielnych progów w kolejności rosnącej, oddzielonych przecinkiem; ostatnia wartość wyznacza wielokrotność kolejnych progów
Przykłady:
{{#invoke:statystyka|languageIndex|10000}}
– grupuje języki w odstępach co 10 000 haseł{{#invoke:statystyka|languageIndex|1000,2000,5000}}
– generuje grupę języków z tysiącem haseł lub więcej, z dwoma tysiącami, z pięcioma tysiącami, a wyżej z wielokrotnością 5000 (ponad 10 000 haseł, ponad 15 000, ponad 20 000 itd.)
queryStorage
Wyłuskuje wartość pożądanej właściwości z tablicy danych JSON.
Parametry: zobacz #Schemat JSON.
Przykłady:
{{#invoke:statystyka|queryStorage|currentDate}}
– data ostatniego zrzutu{{#invoke:statystyka|queryStorage|overall|withReferences}}
– suma wszystkich haseł z przypisami w projekcie{{#invoke:statystyka|queryStorage|languages|hiszpański|withReferences}}
– licznik hiszpańskich haseł z przypisami
canonicalCounter
Licznik haseł z definicją. Zwraca rozmiar kategorii [1] (indeks)
, jeżeli nie znaleziono wskazanego języka w tablicy danych JSON.
Parametry:
1
(opcjonalny): krótka nazwa języka; jeżeli jest pusty, zwraca sumę liczników haseł dla wszystkich języków
Przykłady:
{{#invoke:statystyka|canonicalCounter|hiszpański}}
– licznik hiszpańskich haseł z definicją{{#invoke:statystyka|canonicalCounter}}
– suma wszystkich haseł z definicją w projekcie
flexiveFormCounter
Licznik haseł bez definicji (jedyne znaczenia to formy fleksyjne). Zwraca rozmiar kategorii [1] (formy fleksyjne)
, jeżeli nie znaleziono wskazanego języka w tablicy danych JSON.
Parametry:
1
(opcjonalny): krótka nazwa języka; jeżeli jest pusty, zwraca sumę liczników haseł dla wszystkich języków
Przykłady:
{{#invoke:statystyka|flexiveFormCounter|hiszpański}}
– licznik hiszpańskich haseł bez definicji{{#invoke:statystyka|flexiveFormCounter}}
– suma wszystkich haseł bez definicji w projekcie
definitionCounter
Licznik znaczeń. Zwraca 0, jeżeli nie znaleziono wskazanego języka w tablicy danych JSON.
Parametry:
1
(opcjonalny): krótka nazwa języka; jeżeli jest pusty, zwraca sumę liczników definicji dla wszystkich języków
Przykłady:
{{#invoke:statystyka|definitionCounter|hiszpański}}
– licznik znaczeń w hiszpańskich hasłach{{#invoke:statystyka|definitionCounter}}
– suma znaczeń we wszystkich hasłach w projekcie
Zobacz też
local langs = require 'Moduł:statystyka/dane'
local bdate = langs.date or 'bd.'
local LIMIT = 495 -- było: 500
local p = {}
local pagesInCategory = mw.site.stats.pagesInCategory
-- http://lua-users.org/wiki/FormattingNumbers
local function formatNum( num )
while true do
num, k = string.gsub( num, "^(-?%d+)(%d%d%d)", '%1 %2' )
if k == 0 then break end
end
return num
end
local function traverseIndexes( prop, op, callback )
local count = 0
local maxterms = 0
for position, langdata in ipairs( langs ) do
local langname = langdata[ 1 ]
local options = langdata[ 2 ] or {}
local propcount = 0
if position > LIMIT then
break
end
if prop == 'terms' then
propcount = pagesInCategory( langname .. ' (' .. op .. ')', 'pages' )
if not options.x then
count = count + propcount
end
elseif prop == 'meanings' then
if not op or op == langname then
local pagecount = pagesInCategory( langname .. ' (indeks)', 'pages' )
propcount = math.floor( ( options.z or 0 ) * pagecount )
if not op then
count = count + propcount
else
return propcount
end
else
count = 0
end
end
if callback then
local terms = callback{ position, langname, options, propcount }
if terms > maxterms then
maxterms = terms
end
end
end
return count, maxterms
end
p.WS_STAT = function( frame )
local tcounter = 0
local mcounter = 0
local maxtcount = 0
local langobject = mw.language.new( 'pl' )
local references = {
[ 'licznikZnaczeń' ] = 'W jednym haśle może być więcej niż jedno znaczenie, są one oznaczane kolejnymi numerami, np. (1.1), (1.2), itd. Statystyki znaczeń są oszacowane na podstawie zrzutu bazy danych z dnia ' .. bdate .. ' (średnia liczba znaczeń na hasło z tego dnia pomnożona jest przez aktualną liczbę haseł). Pozostałe dane w tej tabeli są aktualizowane na bieżąco.',
[ 'polski język migowy' ] = 'Wyjątkowo liczone są tu tłumaczenia na PJM – znaki migowe nie mają własnych sekcji.',
[ 'użycie międzynarodowe' ] = 'Znaki i symbole stosowane niezależnie od języka.',
[ 'znak chiński' ] = 'Wykorzystywane w kilku językach.'
}
local function makeRow( pos, lang, conf, pagecount )
local columns = {
key = lang,
lang = mw.html.create( 'td' ),
['%'] = mw.html.create( 'td' ),
hbar = mw.html.create( 'td' ),
pcount = mw.html.create( 'td' ),
mcount = mw.html.create( 'td' ),
pagecount = pagecount
}
local langCSS = {
[ 'background-color' ] = ( pagecount > ( conf.a or 500 ) )
and 'yellow'
or conf.n
and 'silver'
or nil,
[ 'white-space' ] = 'nowrap'
}
local reference = ( conf.r or conf.r2 )
and mw.html.create( 'small' )
:wikitext( frame:extensionTag(
'ref',
references[ conf.r or conf.r2 ],
{ name = conf.r or conf.r2 }
) )
or ''
columns.lang:attr( 'align', 'center' ):css( langCSS )
:tag( 'span' ):attr( 'id', 'sort name' ):css( 'display', 'none' )
:wikitext( ( conf.s or '' ) .. lang ):done()
:wikitext( '[[:Kategoria:' .. lang .. ' (indeks)|' .. lang .. ']]' )
:node( conf.r and reference or '' )
:wikitext(
' ([[:Kategoria:' .. ( conf.w and langobject:ucfirst( lang ) or 'Język ' .. lang ) .. '|⌘]])' ..
( conf.p
and ' ([[:Portal:' .. langobject:ucfirst( lang ) .. '|P]])'
or ''
)
)
columns['%']:attr( 'align', 'right' ):css( 'width', '30px' )
:tag( 'span' ):attr( 'id', 'sort count' ):css( 'display', 'none' )
:wikitext( pagecount )
columns.pcount:attr( 'align', 'right' ):css( 'width', '200px' )
:wikitext( pagecount > 999
and formatNum( pagecount )
or pagecount
)
:node( conf.r2 and reference or '' )
local mcount = ( conf.z or 0 ) * pagecount
mcount = math.floor( mcount )
mcounter = mcounter + mcount
columns.mcount:attr( 'align', 'right' )
:wikitext( mcount > 999
and formatNum( mcount )
or mcount
)
return columns, pagecount
end
local header = mw.html.create( 'tr' )
header:tag( 'th' ):css{
[ 'text-align' ] = 'center',
[ 'width' ] = '10%'
}:wikitext( 'język' )
header:tag( 'th' ):css( 'border-right-style', 'hidden' )
header:tag( 'th' ):addClass( 'unsortable' ):css( 'width', '66%' )
:wikitext( 'licznik haseł' )
header:tag( 'th' ):css{
[ 'width' ] = '10%',
[ 'white-space' ] = 'nowrap',
[ 'border-left-style' ] = 'hidden'
}
header:tag( 'th' ):css{
[ 'white-space' ] = 'nowrap',
[ 'width' ] = '10%'
}:wikitext( 'licznik znaczeń' )
:tag( 'small' ):wikitext(
frame:extensionTag( 'ref', references[ 'licznikZnaczeń' ], { name = 'licznikZnaczeń' } )
)
local contents = mw.html.create( '' )
local rows = {}
tcounter, maxtcount = traverseIndexes( 'terms', 'indeks', function( args )
local columns, terms = makeRow( unpack( args ) )
table.insert( rows, columns )
return terms
end )
table.sort( rows, function( a, b )
return a.key < b.key
end )
for k, row in ipairs( rows ) do
contents:tag( 'tr' )
:node( row.lang )
:node( row['%']:tag( 'small' ):wikitext( string.format(
'%.3f',
( row.pagecount / tcounter ) * 100 ) .. '%'
):done() )
:node( row.hbar:tag( 'div' ):css{
[ 'width' ] = ( 100 * row.pagecount / maxtcount ) .. '%',
[ 'background-color' ] = '#36c'
}
:wikitext( ' ' )
:done() )
:node( row.pcount )
:node( row.mcount )
end
local footer = mw.html.create( 'tr' ):addClass( 'sortbottom' )
footer:tag( 'td' ):attr( 'align', 'right' )
:tag( 'b' ):wikitext( 'Razem:' )
footer:tag( 'td' ):attr( 'align', 'right' )
:tag( 'small' ):wikitext( '100%' )
footer:tag( 'td' )
footer:tag( 'td' ):attr( 'align', 'right' )
:tag( 'b' ):wikitext( formatNum( tcounter ) )
footer:tag( 'td' ):attr( 'align', 'right' )
:tag( 'b' ):wikitext( formatNum( mcounter ) )
return mw.html.create( 'table' )
:addClass( 'wikitable sortable autonumber' )
:css{
[ 'margin' ] = '0',
[ 'text-align' ] = 'left',
[ 'width' ] = '100%'
}
:node( header )
:node( contents )
:node( footer )
end
p.licznik_hasel = function( frame )
local lang = frame:getParent().args[ 1 ]
local name = 'indeks'
if lang then
return pagesInCategory( lang .. ' (' .. name .. ')', 'pages' )
else
return ( traverseIndexes( 'terms', name ) )
end
end
p.licznik_form_fleksyjnych = function( frame )
local lang = frame:getParent().args[ 1 ]
local name = 'formy fleksyjne'
if lang then
return pagesInCategory( lang .. ' (' .. name .. ')', 'pages' )
else
return ( traverseIndexes( 'terms', name ) )
end
end
p.licznik_znaczen = function( frame )
local lang = frame:getParent().args[ 1 ]
return ( traverseIndexes( 'meanings', lang ) )
end
return p