Modul:Seitenname

Aus Zwangsarbeit in der Pfalz
Wechseln zu:Navigation, Suche

Ü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)
  • Jahresbereich: 4 Ziffern, Bindestrich/Gedankenstrich, 4 Ziffern
    • Beispiele: (1860-1936), (1860–1936), (1900—1950)
    • Unterstützte Striche: - (Bindestrich), (Halbgeviertstrich), (Geviertstrich)

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

  1. Erstellen Sie eine neue Seite: Modul:Seitenname
  2. Kopieren Sie den Modulcode
  3. Speichern Sie die Seite
  4. 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