Modul:Namen: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
K (VolkoV verschob die Seite Modul:Namen2 nach Modul:Namen, ohne dabei eine Weiterleitung anzulegen)
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
 
Zeile 12: Zeile 12:
"Heilige","Heiliger","Sankt","Sankta",
"Heilige","Heiliger","Sankt","Sankta",
"Meister","Meisterin","Abt","Äbtissin",
"Meister","Meisterin","Abt","Äbtissin",
"Baron","Beispiel","Pfundt"}
"Baron","Beispiel"}
for k,v in pairs(filter) do
for k,v in pairs(filter) do
if v==name then return "" end
if v==name then return "" end
Zeile 49: Zeile 49:
if n==nil then break end
if n==nil then break end
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
return result
end
end

Aktuelle Version vom 3. Dezember 2024, 11:21 Uhr

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"}
	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 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