tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von CPoly
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
589
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Hi,

    Der Titel ist vielleicht irreführend. Es geht darum, dass ich Zeichen wie z.b. é,è,ê durch e ersetzen will. Das soll dazu dienen bessere Suchtreffer zu erhalten, weil ich praktisch hinter den Kulissen nur auf einem Begrenzten Zeichensatz arbeiten. Mein bisheriger Code sieht folgendermaßen aus.

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    
    public static string ReplaceLookALikes(string text)
    {
        if (String.IsNullOrEmpty(text))
            return text;
     
        char[][] cMap = new char[][] {
            new char[] {'A', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ā', 'Ă', 'Ą'},
            new char[] {'a', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ā', 'ă', 'ą'},
            new char[] {'O', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø'},
            new char[] {'o', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø'},
            new char[] {'E', 'È', 'É', 'Ê', 'Ë'},
            new char[] {'e', 'è', 'é', 'ê', 'ë'},
            new char[] {'I', 'Ì', 'Í', 'Î', 'Ï'},
            new char[] {'i', 'ì', 'í', 'î', 'ï'},
            new char[] {'U', 'Ù', 'Ú', 'Û', 'Ü'},
            new char[] {'u', 'ù', 'ú', 'û', 'ü'},
            new char[] {'Y', 'Ý', 'Ÿ', '¥'},
            new char[] {'C', 'Ç', 'Ć'},
            new char[] {'c', 'ç', 'ć'},
            new char[] {'y', 'ý', 'ÿ'},
            new char[] {'D', 'Ð'},
            new char[] {'d', 'ð'},
            new char[] {'N', 'Ñ'},
            new char[] {'n', 'ñ'},
            new char[] {'S', 'Š'},
            new char[] {'s', 'š'},
            new char[] {'x', '×'},
            new char[] {'Z', 'Ž'},
            new char[] {'z', 'ž'}
       };
     
        string[][] sMap = new string[][] {
            new string[] {"AE", "Æ"},
            new string[] {"ae", "æ"},
            new string[] {"ss", "ß"},
            new string[] {"Th", "þ"},
            new string[] {"th", "Þ"},
            new string[] {"OE", "Œ"},
            new string[] {"oe", "œ"}
        };
     
     
        foreach (char[] cArr in cMap)
            for (int i = 1; i < cArr.Length; i++)
                text = text.Replace(cArr[i], cArr[0]);
     
        foreach (string[] sArr in sMap)
            for (int i = 1; i < sArr.Length; i++)
                text = text.Replace(sArr[i], sArr[0]);
     
        return text;
    }

    Mal davon abgesehen, dass die Liste der Buchstaben nicht unbedingt vollständig ist, Frage ich mich, ob man das ganze auch performanter machen könnte. Oder gibt es eine solche Funktion vielleicht bereits?

    Das ganze steht nicht im .Net Forum, weil ich die Ersetzung in allen beteiligten System durchführen muss (Java, JavaScript, PHP und eventuell noch weitere).
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Da ich jetzt in ähnlichem Zusammenhang nochmal danach gesucht habe, wurde ich gerade fündig (Zumindest für .NET )!

    Der Trick ist ganz einfach. In UTF8 ist es möglich Zeichen wie "é" entweder als ein Zeichen (ein Byte) oder durch zwei Zeichen (e + ´) darzustellen. Näheres z.B. hier http://dev.twitter.com/pages/counting_characters

    .NET hat für den Fall natürlich vorgesorgt. Man kann das zweite Format "erzwingen" und anschließend über alle Zeichen iterieren und solche entfernen, die nur ein Diakritisches Zeichen (http://de.wikipedia.org/wiki/Diakritisches_Zeichen) darstellen.

    Code: http://stackoverflow.com/questions/2...-string-in-net

    Edit: Und für Lucene(.Net) ist es mit einer Zeile getan. Einfach meinen eigenen Analyzer etwas erweitern.

    http://lucene.apache.org/java/2_2_0/...entFilter.html

    Code csharp:
    1
    
    result = new ISOLatin1AccentFilter(result);
    Geändert von CPoly (20.04.11 um 18:10 Uhr)
    Thomas Darimont bedankt sich. 

Ähnliche Themen

  1. zeichen ersetzen
    Von eklis im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 25.08.10, 16:49
  2. Zeichen ersetzen
    Von Piet-Online im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 08.01.08, 16:31
  3. Zeichen ersetzen
    Von scherzkecks im Forum PHP
    Antworten: 8
    Letzter Beitrag: 20.10.05, 20:56
  4. Zeichen ersetzen
    Von ronnyk im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 01.07.04, 10:22
  5. [MX] einzelnes Zeichen ersetzen
    Von alma im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 30.04.04, 05:51