Ich habe ein Tool geschrieben, das viele Sätze miteinander vergleicht. Nun habe ich festgestellt, dass einige Sätze gleich sind, sich aber in Sonderzeichen unterscheiden. Also habe ich eine Routine hinzugefügt, die die Sätze ohne Sonderzeichen vergleicht. Dazu werden alle Sonderzeichen aus dem Satz entfernt. So wird zB aus: "
US-Zölle: So zensiert China kritische Online-Beiträge" der Text "
USZölleSozensiertChinakritischeOnlineBeiträge". Die Trefferquote ist höher. Aber auch die Suchdauer erhöht sich. So wurde aus einer Suche ohne die Routine in 7 Sekunden, eine Suche in 30 Sekunden, mit der Routine. Die Dauer hat sich also vervierfacht. Es ist auch sehr viel Text das verglichen wird.
Gibt es etwas, was alles schneller entfernt?
Die Routine die ich hinzugefügt habe ist die (aufgerufen wird die CleanUpText2 Funktion):
Delphi-Quellcode:
//Funktion entfernt Zeichen. Macht zB aus "Ab Cd Ef" den Text "AbCdEf"
function RemoveChars(S: String; C: Char): String;
begin
Result := S;
// Zeichen entfernen, zB Leerzeichen
while Pos(C, Result) > 0 do
Delete(Result, Pos(C, Result), 1);
end;
//Entfernt bestimmte Zeichen aus dem Text
function CleanUpText(S: String): String;
begin
Result := S;
Result := RemoveChars(S, ' ');
Result := RemoveChars(S, '-'); //Bindestrich
Result := RemoveChars(S, Chr(151)); //Geviertstrich
Result := RemoveChars(S, '_');
Result := RemoveChars(S, ':');
Result := RemoveChars(S, ';');
Result := RemoveChars(S, ',');
Result := RemoveChars(S, '.');
Result := RemoveChars(S, '!');
Result := RemoveChars(S, ''''); //Das ' Zeichen
end;
function CleanUpText2(S: String): String;
begin
Result := CleanUpTitle(S);
end;