Middawaida:YMS/EagleEye

Vun Wikipedia
Tool is under active development. Breaking changes are likely to be introduced without prior or any notice.

EagleEye ist ein Tool, das primär zum Aufspüren von mit bloßem Auge schwer zu findenden und mit Bots und automatischen Skripten kaum korrigierbaren Fehlern in der Wikipedia gedacht ist. Es gliedert sich in drei Teile:

  • Einen Datenbank-Scanner (Scanner) zum gezielten Erstellen von Fehlerlisten anhand eines zuvor heruntergeladenen Datenbank-Dumps
  • Einen Artikel-Scanner (Marker) zum sichtbaren Markieren möglicher Fehler in jedem aufgerufenen Artikel
  • Ein semiautomatisches Korrekturskript (Corrector) zum Beheben oder Markieren der Fehler im Artikelquelltext auf Knopfdruck

Alle drei Teile können unabhängig voneinander genutzt werden, nutzen ansonsten aber denselben Satz an Regeln zum Suchen und Korrigieren der Fehler.


Installation und Konfiguration
Alle drei Teile sind in JavaScript realisiert, es ist keine lokale Installation erforderlich. Zur Nutzung des Datenbank-Scanners muss jedoch ein Datenbank-Dump heruntergeladen werden (es empfiehlt sich der jeweilige pages_articles-Dump, der nur die aktuellen Versionen aller Seiten enthält). Ein halbwegs aktueller Browser ist Voraussetzung (erfolgreich getestet wurde mit Opera 12.15, Opera Mobile 12.10, Firefox 21, Chrome 27 und Internet Explorer 10, wobei von Letzterem aus Performancegründen abzuraten ist), ebenso natürlich die Aktivierung von JavaScript in selbigem.

Zum Aktivieren muss in die eigene Skript-Datei (<skinname>.js oder gleich common.js) das Skript User:YMS/eagleeye.js eingebunden werden. Außerdem sollte eine Ruleset-Datei angelegt werden (standardmäßig Spezial:Meine Benutzerseite/eagleeye.ruleset.js), als Kopiervorlage dazu bietet sich User:YMS/EagleEye/ruleset.json.js an (die dort definierten Regeln korrigieren die meisten potentiellen Fehler nicht unmittelbar, sondern fügen die im Vorschau-Diff leicht sichtbare Zeichenkette "!!!" ein, um die angebrachte manuelle Überprüfung zu erleichtern - ein Vorgehen, das auch für eigene Regeln empfohlen wird). Ferner kann über diverse Variablen das Verhalten konfiguriert werden. Diese sind optional - im folgenden Beispiel werden die Standardwerte verwendet und die Angaben der Variablen ist daher eigentlich komplett unnötig.

// Konfigurationsvariablen (optional)
var eeRuleset = "User:<Benutzername>/eagleeye.ruleset.js"; // The ruleset file (using a .js file in your user space prevents others from changing your rules)
var eeLang = "en"; // Language (currently supported: de, en; default: user language or project language or en, whichever first is available)
var eeActivate = [true, true, true]; // Activate scanner (portlet and tool itself) / marker / corrector (button and script itself)
var eeNamespaces = [[0], [0], [0]]; // Namespaces for scanner (default value only) / marker / corrector
var eeUseSkiplist = [true, false, false]; // Whether the skiplist should be used for scanner / marker / corrector ('''NOTE: not yet implemented for marker/corrector''')
var eeMarkerPrefix = "ee_"; // Prefix for markers (e.g. "ee_" will result in markers like "ee_Doppelwort", may be set to "" for no prefix)
var eeMarkerStyle = "background-color: #FF9191;"; // CSS style for the marker highlighting (more can be defined for span.eeMarker in user CSS)
var eeScannerChunkSize = 10000000; // The chunk size for the database scanner (too low values will fail [depends on database] or cause bad performance, too high values may cause bad performance or even crashes)
var eeScannerListAll = false; // Whether the scanner should list all matches for a page instead of only the first one
var eeScannerPage = "User:YMS/EagleEye"; // The page that will trigger the database scanner (usually only useful where User:YMS/EagleEye doesn't exist)
var eeScannerResultPage = "User:<Benutzername>/eagleeye.result"; // The default page where result lists are saved (on demand)
var eeScannerResultPageWithMatches = true; // Whether saving the result page should include matches (instead of titles only)

// Script
// [[User:YMS/eagleeye.js]]
mw.loader.load("//pfl.wikipedia.org/w/index.php?title=Benudzer:YMS/eagleeye.js&action=raw&ctype=text/javascript");
Fragen, Fehlermeldungen und Verbesserungsvorschläge bitte an Benutzer:YMS richten. Danke!
Nutzung

Das Scanner-Tool wird über den Eintrag "Eagle Eye" in der Navigationsleiste aufgerufen. In der Oberfläche können diverse Optionen eingestellt sowie einzelne Regeln aktiviert/deaktiviert und bearbeitet werden (wird ein code>test-String eingeben, prüft der Scanner automatisch nach jeder Änderung, ob die bearbeitete Regel für diesen weiterhin korrekterweise anschlagen würde). Diese Änderungen lassen sich auch abspeichern, sofern du Schreibrechte für die Ruleset-Datei hast.

Die Regeln selbst werden durch folgende Eigenschaften definiert:

  • Aktiv: Die Regel wird für Scanner/Marker/Corrector beachtet
  • Name: Name (insb. für die Markierungen im Marker und die Ergebnislisten im Scanner)
  • Match: Die Suchregel selbst, definiert als regulärer Ausdruck in JavaScript-Syntax mit den Erweiterungen der XRegExp-Bibliothek von Steven Levithan.
    • Da etwa das Wortzeichen \w in JavaScript nicht Unicode-tauglich ist (sondern nur [A-Za-z0-9_] erfasst, und damit etwa keine Umlaute), empfiehlt sich der Einsatz des RegExp-Letter-Blocks \p{L}
    • Auch Unicode-Properties wie \p{Latin}, Named Captures wie ?<name>, vorangehängte Modifikatoren wie (?i) und Inline-Kommentare sind mit XRegExp möglich
  • Überspringen: Ein weiterer regulärer Ausdruck, den die Fundstellen nicht erfüllen dürfen (optional)
    • Derzeit nur im Scanner verwendet (dort auch für alle Regeln abschaltbar), dadurch lässt sich im Scanner die Flut der False Positives eindämmen, die dann in der Artikelansicht doch nochmal überprüft werden können
    • Beachte: Für die Skiplist wird ausschließlich der Treffer geprüft, der Kontext ist nicht vorhanden. (Beispiel: Die Suche "t.st" findet "test" und "tast", soll per Skiplist nun aber "taste" ignoriert werden, muss die Suche etwa "t.st.?" lauten)
  • Ersetzen: Durch was die Fundstelle im Corrector ersetzt werden soll.
  • Test: Ein Beispieltext für den die Suche anschlagen soll, um die Korrektheit der Regel zumindest rudimentär zu testen und auch bei Regeländerungen die Konsistenz möglichst zu sichern (optional)
  • Anmerkungen: Notizen

Der Scan nach den durch die ausgewählten Regeln möglichen Fehlern startet, wenn über den entsprechenden Auswahldialog ein passender Datenbank-Dump ausgewählt und der Startbutton gedrückt wird. Achtung: Je nach Größe des Datenbankdumps, eigener Rechnerausstattung, Browser, sowie Anzahl und Komplexität der verwendeten Regeln und diverser weiterer Optionen (Verwendung der Skiplist, Auswahl der Namensräume, Chunk Size, ...) kann diese Suche sehr lange dauern und eine sehr große Ergebnisseite provozieren. Für die deutsche Wikipedia sollten im einfachsten Falle mindestens 15 Minuten eingeplant werden - komplexere Aufgaben verlangen erheblich mehr Zeit (während des Scannens können die ersten Ergebnisse bereits bearbeitet werden, allerdings kann der Browser träge reagieren). Auch diese Ergebnisseite lässt sich im Wiki-Markup abspeichern, die Seite dafür kann in der Oberfläche frei angegeben werden.

Es sollte einem klar sein, dass ein Datenbankdump keine aktuellen Daten enthält und daher keine Live-Suche möglich ist. Darin gefundene Fehler können also in der Wikipedia bereits korrigiert sein. Zur Vereinfachung dieser Überprüfung ist das Marker-Tool gedacht.

Das Marker-Tool ist in den konfigurierten Namensräumen (Standard: nur Artikel) automatisch aktiv und hebt bei jedem SEitenaufruf verdächtige Stellen ähnlich dem BKL-Helferlein hervor (aus technischen Gründen werden derzeit nicht alle Fehler gefunden, die die beiden anderen Tools finden, und unter Umständen kann es zu Layoutfehlern kommen).

Das Corrector-Tool sollte in den seinerseits konfigurierten Namensräumen im Bearbeiten-Modus als zusätzlicher Editbutton () erscheinen (so unter Einstellungen > Bearbeiten die "Erweiterte Bearbeiten-Werkzeugleiste" aktiviert ist). Die Regeln werden in derselben Reihenfolge abgearbeitet in der sie auch im Scanner-Interface angezeigt werden.

Wenn die Ersetzungsregeln nicht nur einfache Syntaxkorrekturen vornehmen sollen (wofür es ggf. einfachere Skripte oder mächtigere Tools gibt oder was evt. ein Bot übernehmen könnte), ist die Verwendung eines brauchbaren Diff-Skripts zur besseren Überprüfung der vorgenommenen Änderungen sehr anzuraten.