Modul:Namen
Zur Navigation springen
Zur Suche springen
Die Dokumentation für dieses Modul kann unter Modul:Namen/Doku erstellt werden
local p = {}
require("Modul:Hilfsfunktionen")
function pruefeName(name)
--Titel in doppelten Anführungsstrichen raus
if mw.ustring.find(name,"\"",1,true)~=nil then return "" end
--Römische Zahlen (alles mit .) raus
if mw.ustring.find(name,".",1,true)~=nil then return "" end
--Zu aussortierende Namen
local filter={"Mutter","Vater","Bruder","Schwester","Sohn","Tochter",
"Heilige","Heiliger","Sankt","Sankta",
"Meister","Meisterin","Abt","Äbtissin",
"Baron","Beispiel","Pfundt"}
for k,v in pairs(filter) do
if v==name then return "" end
end
--Worte, nach denen nicht weiter gesucht wird
local stop={"von","vom","zu","zum","zur","des","der","am","im","an","in",
"auf","a","al","ap","aus","ay","ben","da","di","de","della","den","der",
"die","du","dyll","dylli","han","ibn","il","ni","res","saba","te","ui",
"vor","ya"}
for k,v in pairs(stop) do
if v==name then return nil end
end
return name
end
function vornamen(name)
--Sonderzeichen raus
local n=mw.ustring.gsub(name,"-"," ")
n=mw.ustring.gsub(n,"'","")
n=mw.ustring.gsub(n,"´"," ")
n=mw.ustring.gsub(n,"`"," ")
n=mw.ustring.gsub(n,","," ")
--nach Leerzeichen teilen
local namen=split(n," ")
local result={}
--bei nur einem Namen ist dies der Vorname, ansonsten wird der letzte Name immer ignoriert
local c=#namen-1
if c==0 then c=1 end
local i=1
for j=1,c do
local n=pruefeName(namen[j])
if n~=nil and n~="" then
result[i]=n
i=i+1
end
if n==nil then break end
end
return result
end
function holeNamen(prefix,filter)
if prefix=='' then return {} end
local namen=mw.smw.ask('[[Vorname::~'..prefix..'*]]'..filter
..'|mainlabel=-'
..'|?Vorname'
..'|limit=5000'
..'|offset=0'
)
return noniltable(namen)
end
function zaehleNamen(namen,prefix)
local count={}
for k,v in pairs(namen) do
vtable=noniltable(v["Vorname"])
for k2,v2 in pairs(vtable) do
if(mw.ustring.find(v2,prefix,1,true)~=nil) then
if(count[v2]==nil) then
count[v2]=1
else
count[v2]=count[v2]+1
end
end
end
end
return count
end
function formatiereNamen(count)
local result=""
for k,v in spairs(count,function(count,a,b)
if count[a]==count[b] then
return a<b
end
return count[a]>count[b]
end) do
result=result.."\n#"..k.." ("..v.."x)"
end
return result
end
function p.Abfrage(frame)
if (frame.args[1]==nil) then
return 'no parameter found'
end
local prefix=robusttrim(frame.args[1])
local filter=robusttrim(frame.args[2])
local namen=holeNamen(prefix,filter)
local count=zaehleNamen(namen,prefix)
local result=formatiereNamen(count)
return result
end
function p.Vornamen(frame)
if (frame.args[1]==nil)or(frame.args[2]==nil) then
return 'no parameter found'
end
local name=robusttrim(frame.args[1])
local nr=tonumber(robusttrim(frame.args[2]))
local namen=vornamen(name)
if namen[nr]==nil then return "" end
return namen[nr]
end
return p