Modul:Seitenname
Überblick
Das Seitenname-Modul extrahiert saubere Seitennamen aus Text, der möglicherweise eingeklammerte Informationen enthält. Es ist darauf ausgelegt, sowohl einzelne Werte als auch durch Semikolons getrennte Listen zu verarbeiten, was es perfekt für die Verarbeitung von MediaWiki-Vorlagenparametern mit inkonsistenter Formatierung macht.
Besonderheit: Das Modul erkennt automatisch Datumsmuster in Klammern (wie Jahreszahlen oder Lebensdaten) und lässt diese unverändert, um historische und biografische Informationen zu bewahren.
Zweck
Dieses Modul löst das häufige Problem von Seitenverweisen, die manchmal zusätzliche Informationen in Klammern enthalten. Anstatt manuell zu prüfen, ob Klammern vorhanden sind, können Sie dieses Modul verwenden, um konsistent den relevanten Seitennamen zu extrahieren, während wichtige Datumsinformationen erhalten bleiben.
Funktionen
extractor
Hauptfunktion - Verarbeitet Eingabetext und extrahiert Inhalte aus Klammern.
Syntax:
{{#invoke:Seitenname|extractor|eingabe_text}}
Parameter:
eingabe_text- Der zu verarbeitende Text (kann einzelne oder mehrere durch Semikolons getrennte Werte enthalten)
Rückgabe:
- Wenn Klammern
()gefunden werden: Inhalt innerhalb der Klammern - Wenn keine Klammern gefunden werden: Ursprünglicher Text unverändert
- Ausnahme: Datumsmuster werden nicht extrahiert (siehe Datumserkennung)
- Für mehrere Werte: Jeder Wert wird separat verarbeitet und mit Semikolons wieder zusammengefügt
info
Informationsfunktion - Gibt Modulversion und Metadaten zurück.
Syntax:
{{#invoke:Seitenname|info}}
Rückgabe: Modulinformationen einschließlich Version, Datum, Ersteller und Beschreibung.
Beispiele
Einzelne Werte
Beispiel 1: Text mit Klammern
Eingabe:
{{#invoke:Seitenname|extractor|Objekt:Dorflade von 1797 (Objekt:493233)}}
Ausgabe:
Objekt:493233
Beispiel 2: Text ohne Klammern
Eingabe:
{{#invoke:Seitenname|extractor|Objekt:Dorflade von 1797}}
Ausgabe:
Objekt:Dorflade von 1797
Beispiel 3: Komplexer Seitenname mit Klammern
Eingabe:
{{#invoke:Seitenname|extractor|Ober-Erlosenstrasse 1 (8340-Hinwil-Ober-Erlosenstrasse-1-764)}}
Ausgabe:
8340-Hinwil-Ober-Erlosenstrasse-1-764
Mehrere Werte (durch Semikolons getrennt)
Beispiel 4: Gemischter Inhalt mit und ohne Klammern
Eingabe:
{{#invoke:Seitenname|extractor|8340-Hinwil-Bahnhofplatz-1.5-3607; Ober-Erlosenstrasse 1 (8340-Hinwil-Ober-Erlosenstrasse-1-764)}}
Ausgabe:
8340-Hinwil-Bahnhofplatz-1.5-3607; 8340-Hinwil-Ober-Erlosenstrasse-1-764
Beispiel 5: Mehrere Werte alle mit Klammern
Eingabe:
{{#invoke:Seitenname|extractor|Standort A (Seite:123); Standort B (Seite:456); Standort C (Seite:789)}}
Ausgabe:
Seite:123; Seite:456; Seite:789
Beispiel 6: Mehrere Werte ohne Klammern
Eingabe:
{{#invoke:Seitenname|extractor|Seite:123; Seite:456; Seite:789}}
Ausgabe:
Seite:123; Seite:456; Seite:789
Datumserkennung
Das Modul erkennt automatisch Datumsmuster in Klammern und lässt diese unverändert. Dies betrifft:
- 4-stellige Jahreszahlen:
(1642),(2023) - Jahreszeiträume:
(1860–1936),(1900-1950)
Beispiel 7: Historische Objekte mit Jahreszahlen
Eingabe:
{{#invoke:Seitenname|extractor|Schloss und Städtchen Grüningen (1642)}}
Ausgabe:
Schloss und Städtchen Grüningen (1642)
Beispiel 8: Biografische Daten
Eingabe:
{{#invoke:Seitenname|extractor|Bär, Heinrich (1860–1936)}}
Ausgabe:
Bär, Heinrich (1860–1936)
Beispiel 9: Gemischte historische und moderne Verweise
Eingabe:
{{#invoke:Seitenname|extractor|Städtchen Grüningen (1642); Bär, Heinrich (1860–1936); Objekt:Dorflade (Objekt:493233)}}
Ausgabe:
Städtchen Grüningen (1642); Bär, Heinrich (1860–1936); Objekt:493233
Modulinformationen
Beispiel 10: Modulinformationen abrufen (Standard - Deutsch)
Eingabe:
{{#invoke:Seitenname|info}}
Ausgabe:
Modul Seitenname: Extrahiert Inhalte aus Klammern in durch Semikola getrennten Werten, ausgenommen Datumsangaben. [Version v1.3.0, 2025-11-03, Lizenz ISC, Karsten Hoffmeyer (Professional Wiki) mit Hilfe von Claude Sonnet 4.]
Beispiel 11: Modulinformationen auf Deutsch
Eingabe:
{{#invoke:Seitenname|info|de}}
Ausgabe:
Modul Seitenname: Extrahiert Inhalte aus Klammern in durch Semikola getrennten Werten, ausgenommen Datumsangaben. [Version v1.3.0, 2025-11-03, Lizenz ISC, Karsten Hoffmeyer (Professional Wiki) mit Hilfe von Claude Sonnet 4.]
Beispiel 12: Modulinformationen auf Englisch
Eingabe:
{{#invoke:Seitenname|info|en}}
Ausgabe:
Module Seitenname: Extracts content from parentheses in semicolon-separated values, excluding date patterns. [Version v1.3.0, 2025-11-03, License ISC, Karsten Hoffmeyer (Professional Wiki) with help from Claude Sonnet 4.]
Beispiel 13: Nicht unterstützte Sprache (Rückgriff auf Deutsch)
Eingabe:
{{#invoke:Seitenname|info|fr}}
Ausgabe:
Modul Seitenname: Extrahiert Inhalte aus Klammern in durch Semikola getrennten Werten, ausgenommen Datumsangaben. [Version v1.3.0, 2025-11-03, Lizenz ISC, Karsten Hoffmeyer (Professional Wiki) mit Hilfe von Claude Sonnet 4.]
Datumsmuster-Erkennung
Das Modul verwendet intelligente Mustererkennung, um zwischen echten Seitenverweisen und Datumsinformationen zu unterscheiden:
Erkannte Datumsmuster
- Einzelne Jahreszahl: Genau 4 Ziffern in Klammern
- Beispiele:
(1642),(1789),(2023)
- Beispiele:
- Jahresbereich: 4 Ziffern, Bindestrich/Gedankenstrich, 4 Ziffern
- Beispiele:
(1860-1936),(1860–1936),(1900—1950) - Unterstützte Striche:
-(Bindestrich),–(Halbgeviertstrich),—(Geviertstrich)
- Beispiele:
Nicht erkannte Muster (werden extrahiert)
- Seitenverweise:
(Objekt:493233) - Gemischte Zeichen:
(Seite:123) - Zusätzliche Informationen:
(siehe auch xyz) - Jahreszahlen mit zusätzlichem Text:
(um 1642)
Praktische Anwendungsfälle
Historische Dokumente:
{{#invoke:Seitenname|extractor|Chronik der Stadt Zürich (1576); Stadtansicht Winterthur (Bild:234567)}}
→ Chronik der Stadt Zürich (1576); Bild:234567
Biografische Einträge:
{{#invoke:Seitenname|extractor|Müller, Hans (1823–1889); Weber, Anna (Person:98765)}}
→ Müller, Hans (1823–1889); Person:98765
Grenzfälle
Leere oder fehlende Eingabe
Eingabe:
{{#invoke:Seitenname|extractor|}}
Ausgabe:
(leere Zeichenkette)
Fehlerhaft formatierte Klammern
Eingabe:
{{#invoke:Seitenname|extractor|Text mit (nicht geschlossener Klammer}}
Ausgabe:
Text mit (nicht geschlossener Klammer
Eingabe:
{{#invoke:Seitenname|extractor|Text mit nicht geöffneter) Klammer}}
Ausgabe:
Text mit nicht geöffneter) Klammer
Mehrere Klammerpaare
Eingabe:
{{#invoke:Seitenname|extractor|Text (erster) und (zweiter) Teil}}
Ausgabe:
erster
Hinweis: Nur das erste vollständige Klammerpaar wird verarbeitet.
Datumsmuster werden nicht extrahiert
Eingabe:
{{#invoke:Seitenname|extractor|Historisches Gebäude (1642)}}
Ausgabe:
Historisches Gebäude (1642)
Eingabe:
{{#invoke:Seitenname|extractor|Lebensdaten einer Person (1860–1936)}}
Ausgabe:
Lebensdaten einer Person (1860–1936)
Technische Details
- Sprache: Lua (MediaWiki Lua-Modul)
- Abhängigkeiten: Keine (verwendet Standard-Zeichenketten-Funktionen von Lua)
- Performance: Effizient für typische MediaWiki-Nutzung mit intelligenter Mustererkennung
- Kompatibilität: MediaWiki 1.43+
- Unicode-Unterstützung: Vollständige Unterstützung für verschiedene Bindestrich-Arten (-, –, —)
Installation
- Erstellen Sie eine neue Seite:
Modul:Seitenname - Kopieren Sie den Modulcode
- Speichern Sie die Seite
- Verwenden Sie es in Vorlagen mit
{{#invoke:Seitenname|extractor|ihr_text}}
Versionsgeschichte
- v1.4.0 (2025-11-03): Verbessert: Spezifische Zeichenketten können von der Extraktion ausgeschlossen werden
- v1.3.0 (2025-11-03): Verbessert: Sprachspezifische Ausgabe von Informationen zum Modul
- v1.2.1 (2025-11-03): Hinzugefügt: Lizenzangabe
- v1.2.0 (2025-10-21): Hinzugefügt: Sprachspezifische Ausgabe von Informationen zum Modul
- v1.1.0 (2025-10-21): Hinzugefügt: Automatische Erkennung und Ausschluss von Jahresmustern in Klammern
- v1.0.0 (2025-10-17): Erstveröffentlichung mit Unterstützung für durch Semikolons getrennte Werte
Code
local p = {}
-- Module information
p.version = "1.4.0"
p.date = "2025-11-24"
p.creator = "Karsten Hoffmeyer (Professional Wiki)"
p.assistant = "Claude Sonnet 4"
p.license = "ISC"
p.license_url = "https://opensource.org/licenses/ISC"
-- Language data
local lang_data = {
de = {
desc = "Extrahiert Inhalte aus Klammern in durch Semikola getrennten Werten, ausgenommen Datumsangaben.",
template = "Modul Seitenname: %s [Version v%s, %s, Lizenz %s, %s mit Hilfe von %s.]"
},
en = {
desc = "Extracts content from parentheses in semicolon-separated values, excluding date patterns.",
template = "Module Seitenname: %s [Version v%s, %s, License %s, %s with help from %s.]"
}
}
-- Negativelist of content that should NOT be extracted from parentheses
local extraction_negativelist = {
"example string",
-- Add more as needed
}
function p.extractor(frame)
local input = frame.args[1] or ""
-- Check if input is nil or empty
if not input or input == "" then
return input
end
-- Split by semicolon and process each part
local parts = {}
for part in input:gmatch("[^;]+") do
-- Trim whitespace from each part
part = part:match("^%s*(.-)%s*$")
-- Process each part for brackets
local processed = p._extractBrackets(part)
table.insert(parts, processed)
end
-- Join back with semicolons and spaces
return table.concat(parts, "; ")
end
-- Function to get module version info
function p.info(frame)
local lang = string.lower(frame.args[1] or "de")
local data = lang_data[lang] or lang_data.de
return string.format(data.template, data.desc, p.version, p.date, p.license, p.creator, p.assistant)
end
function p._extractBrackets(input)
-- Check if input is nil or empty
if not input or input == "" then
return input
end
-- Look for content between the first opening bracket and first closing bracket
local openPos = input:find("%(")
local closePos = input:find("%)", openPos)
-- If both brackets exist, check content before extracting
if openPos and closePos and closePos > openPos then
local bracketContent = input:sub(openPos + 1, closePos - 1)
-- Check if bracket content matches date patterns that should be excluded:
-- Pattern 1: Exactly 4 digits (e.g., "1642")
-- Pattern 2: 4 digits, dash/en-dash, 4 digits (e.g., "1860–1936" or "1860-1936")
-- Note: Check each dash type separately since Lua patterns handle Unicode differently
if bracketContent:match("^%d%d%d%d$") or
bracketContent:match("^%d%d%d%d%-%d%d%d%d$") or
bracketContent:match("^%d%d%d%d–%d%d%d%d$") or
bracketContent:match("^%d%d%d%d—%d%d%d%d$") then
-- This looks like a date pattern, don't extract - return original
return input
else
-- Check if content is on the negativelist
for _, item in ipairs(extraction_negativelist) do
if bracketContent == item then
-- This is on the negativelist, don't extract - return original
return input
end
end
-- Not a date pattern and not on negativelist, extract the bracket content
return bracketContent
end
end
-- If no complete bracket pair found, return original string
return input
end
return p