HANDEDICT汉德词典
HanDeDict 汉德词典
Suche Änderungen Infos Suchtipps Details Über Download Benutzerliste
DE EN
 

Massenänderung 002: Datenreinigung

Die ursprüngliche HanDeDict-Datei wies verschiedene Probleme auf. Manche davon sind marginal, wie z.B. die inkonsistente Verwendung von geraden und typographischen Anführungszeichen. Andere sind störend, wie der gemischter Gebrauch von <> und () als Klammern, oder multiple Leerzeichen. Manche Probleme sind möglicherweise durch Skriptfehler der ursprünglichen HanDeDict-Seite, oder durch Kodierungsfehler in der Wayback Machine verursacht, wie z.B. die Anwesenheit von &gt (ohne Semikolon) in mehreren Einträgen. Es gibt ernsthafte Probleme, die aber leicht zu korrigieren sind. Ein Beispiel sind fehlende Leerzeichen, da diese die Wortgrenzen verändern und dazu führen, dass die Suchfunktion deutsche Wörter, die eigentlich im Wörterbuch sind, nicht findet. Einige Probleme sind ernsthaft und mit automatischen Methoden leider nicht korrigierbar. / kommt in manchen Einträgen als Text vor, was aber nicht von der wahren Funktion von / als Trennzeichen zwischen Bedeutungen zu unterscheiden ist. Schließlich enthält die Mehrzahl der Einträge in der Originaldatei (u.E.), was in HanDeDict @ Zydeo ins erweiterte Format gehört und nicht im Anzeigetext erscheinen darf.

Vor dem Import wurde ein zweites Skript ausgeführt, um möglichst alle maschinell korrigierbaren Probleme zu beseitigen. Das Skript generiert für jeden geänderten Eintrag eine neue Version mit dem Benutzernamen zydeo-robot. Dieser Benutzer ist ein Platzhalter für automatische Datenverarbeitung, damit ähnliche Massenänderungen in der Änderungsgeschichte leicht von menschlichen Beiträgen zu unterscheiden sind.

Für den technischen Leser ist es am einfachsten, den relevanten Teil des Skripts, der einen einzigen Eintrag verarbeitet, zu lesen:

private Regex reLtGt = new Regex(@"<([^>\/]+)>");
private Regex reAngled = new Regex(@"\[([^\]\/]+)\]");
private Regex reCommaSpace = new Regex(@",(\p{L})");
private Regex reParenSpace1 = new Regex(@"\( *([^\)]+)\)");
private Regex reParenSpace2 = new Regex(@" +\)");
private string cleanse(string line)
{
    // Curly quotes, non-breaking spaces
    line = line.Replace(' ', ' '); // NBSP
    line = line.Replace('\t', ' '); // TAB
    line = line.Replace('“', '"'); // Curly quote
    line = line.Replace('”', '"'); // Curly quote
    // Remove "(u.E.)" from entry itself. We put this info into the Status meta field.
    line = line.Replace("(u.E.)", "");
    // Fix incorrect entities
    line = line.Replace("&gt", ">");
    line = line.Replace("&quot", "\"");
    // <something> -> (something)
    line = reLtGt.Replace(line, "($1)");
    // Angle [brackets] inside body
    int spos = line.IndexOf('/');
    string head = line.Substring(0, spos);
    string body = line.Substring(spos);
    body = reAngled.Replace(body, "($1)");
    line = head + body;
    // No space after comma
    line = reCommaSpace.Replace(line, ", $1");
    // Multiple spaces
    while (true)
    {
        string b = line.Replace("  ", " ");
        if (b == line) break;
        line = b;
    }
    // Spaces inside ( parentheses )
    line = reParenSpace1.Replace(line, "($1)");
    line = reParenSpace2.Replace(line, ")");
    // Trailing / leading spaces in senses
    spos = line.IndexOf('/');
    head = line.Substring(0, spos);
    body = line.Substring(spos);
    body = body.Replace("/ ", "/");
    body = body.Replace(" /", "/");
    line = head + body;
    // Phew
    return line;
}

Reproduktion

Wrk20Cleanse.cs im Projekt ZD.Tool ist das Skript, das für die Verarbeitung benutzt wurde. So führen Sie das Skript aus:

  1. Kopieren Sie x-10-handedict.txt (den Output des vorausgegangenen Skripts) in einen Unterordner namens _work unter dem Stammverzeichnis der Solution
  2. Kompilieren Sie ZD.Tool und führen Sie es mit dem Argument --20-cleanse aus

Output: x-20-handedict.txt ist die Datei, die in die Website HanDeDict @ Zydeo importiert wurde.

OK Mehr erfahren
Diese Website verwendet für einige Funktionen Cookies. Indem Sie die Website benutzen, stimmen Sie der Verwendung von Cookies zu.
mmmmmmmmmm