-
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).
-
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)
Ähnliche Themen
-
zeichen ersetzen
Von eklis im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 25.08.10, 16:49 -
Zeichen ersetzen
Von Piet-Online im Forum Visual Basic 6.0Antworten: 4Letzter Beitrag: 08.01.08, 16:31 -
Zeichen ersetzen
Von scherzkecks im Forum PHPAntworten: 8Letzter Beitrag: 20.10.05, 20:56 -
Zeichen ersetzen
Von ronnyk im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 01.07.04, 10:22 -
[MX] einzelnes Zeichen ersetzen
Von alma im Forum Flash PlattformAntworten: 2Letzter Beitrag: 30.04.04, 05:51



1Danke



Zitieren
Login





