AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie kann man diesen Code optimieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann man diesen Code optimieren

Ein Thema von Alallart · begonnen am 10. Apr 2025 · letzter Beitrag vom 11. Apr 2025
Antwort Antwort
Seite 1 von 2  1 2      
Alallart

Registriert seit: 8. Dez 2015
162 Beiträge
 
#1

Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 11:36
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;
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.371 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 11:41
Ich habe es einfach mal an die KI weitergegeben. Ergebnis:
Delphi-Quellcode:
function CleanUpText(const S: String): String;
const
  CharsToRemove: set of Char = [' ', '-', Chr(151), '_', ':', ';', ',', '.', '!', ''''];
var
  I, J: Integer;
begin
  SetLength(Result, Length(S));
  J := 1;
  for I := 1 to Length(S) do
    if not (S[I] in CharsToRemove) then
    begin
      Result[J] := S[I];
      Inc(J);
    end;
  SetLength(Result, J - 1);
end;
Peter
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#3

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 11:47
Zuerst würd' ich den Text in reine Kleinbuchstaben umwandeln, damit nicht über Unterschiede in der Groß-Kleinschreibung gestolpert wird.

Danach in einer Schleife die Zeichenfolge durchgehen, nur als Pseudocode:
Delphi-Quellcode:
function CleanUpText(sInput : Strng) : String;
var
 i : Integer;
begin
  Result := '';
  for i := 1 to Length(sInput) do begin
    case sInput[i] of
      'a'..'z' : Result := Result + sInput[i];
      'A'..'Z' : Result := Result + LowerCase(sInput[i]);
      // Sind Umlaute relevant?
      'Ä','ä'  : Result := Result + 'a'; // das a ist Absicht, wegen z. B. Flughafen und Flughäfen
      'Ö','ö'  : Result := Result + 'o';
      'Ü','ü'  : Result := Result + 'u';
      'ß'      : Result := Result + 'ss';
    end;
  end;
Bringt das was?
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
162 Beiträge
 
#4

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 12:21
@Jasocul

Wo bleibt da bei der KI Optimierung noch der Spaß am programmieren

Vielen Dank, das funktioniert tatsächlich. Statt 30 braucht er nur noch 9 Sekunden. Im Gegensatz zu 7 Sekunden ohne eine zusätzliche Routine.

Ich habe mich bisher nicht mit der KI auseinandergesetzt, da ich das für eine Spielerei hielt, und der Meinung war, dass die sowas komplexes nicht hin bekommt. Nun bin ich eines besseren belehrt. Welche KI hast du genutzt? Ich habe es gerade mit Grok versucht. Der Code ist nicht so schön und kurz wie dein, aber auch optimiert.

@Delphi.Narium

Danke, werde ich auch noch hinzufügen. Das mit Groß- und Kleinschreibung hatte ich bereits, aber die Umlaute sollten auch entfernt werden.
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
461 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 12:23
Wenn es wirklich auf Performance ankommt, würde ich den letzten Vorschlag favorisieren. Allerdings würde ich sowas wie Result := Result + 'xyz'; vermeiden und stattdessen auf Operationen mit PChar setzen. Das geht in der Regel deutlich schneller.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.371 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 12:39
@Alallart
Beruflich nutze ich ChatGPT (lizensiert). Die Daten bleiben in der Firma.
Privat bleibe ich in Europa mit "Le Chat". Bei ein paar Vergleichen habe ich festgestellt, dass die Ergebnisse zwischen den Beiden sehr ähnlich sind.

Zum Spaß bei der Programmierung:
Routine-Aufgaben lasse ich inzwischen sehr oft durch die KI erledigen. In deinem Beispiel war es eine Optimierung des Sources. Allerdings hätte ich die KI vermutlich gleich gefragt, wie die Routine aussehen muss, statt selbst erst was zu tippen und dann optimieren zu lassen.
Man muss sich aber auch etwas damit beschäftigen, damit man lernt, die richtigen Fragen zu stellen. Und man sollte trotzdem immer noch mal prüfen, ob das Ergebnis wirklich das macht, was man möchte.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.948 Beiträge
 
Delphi 12 Athens
 
#7

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 13:38
Man muss sich aber auch etwas damit beschäftigen, damit man lernt, die richtigen Fragen zu stellen.
Und man muss genau spezifizieren, was man eigentlich haben möchte. Wenn man dabei ausführlich ist, bekommt man meist sehr gute Ergebnisse. Ich beginne Fragen z.B. mit:
Delphi, ICS: Wie kann ich...

Und man sollte trotzdem immer noch mal prüfen, ob das Ergebnis wirklich das macht, was man möchte.
Und bevor man hier solchen Code postet oder jemandem schickt, sollte man ihn auch zumindest versuchen zu kompilieren. Es kam bei mir z.B. schon vor, dass ChatGPT fest behauptet hat, dass Delphi eine bestimmte Klasse hat, sogar deren Eigenschaften beschrieben hat, aber auf Nachfrage zugeben musste, dass es die gar nicht gibt...
Halluzinationen kommen öfter mal vor.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.371 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 14:10
Und man sollte trotzdem immer noch mal prüfen, ob das Ergebnis wirklich das macht, was man möchte.
Und bevor man hier solchen Code postet oder jemandem schickt, sollte man ihn auch zumindest versuchen zu kompilieren. Es kam bei mir z.B. schon vor, dass ChatGPT fest behauptet hat, dass Delphi eine bestimmte Klasse hat, sogar deren Eigenschaften beschrieben hat, aber auf Nachfrage zugeben musste, dass es die gar nicht gibt...
Halluzinationen kommen öfter mal vor.
Definitiv.
Mir wollte die KI "class operator implicit" für eine Klasse aufdrängen. Geht aber leider nur mit Records. Wenn man das dann nicht weiß, sucht man den Fehler an der falschen Stelle.
Peter
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.170 Beiträge
 
Delphi 12 Athens
 
#9

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 15:11
Ungetestet: Vieleicht so, oder ähnlich um in einem Durchlauf alle Zeichen zu entfernen?


Delphi-Quellcode:
uses
    System.SysUtils, System.Classes;

const
    Removals : set of Char = [' ', '-', Chr(151), '_', ':', ';', ',', '.', '!', ''''];

function CleanUpTextUsingBuilder(const S: string): string;
var
  i : Integer;
  sb : TStringBuilder;
begin
  sb := TStringBuilder.Create(Length(S));
  try
    for i := 1 to Length(S) do
    begin
        if not (S[i] in Removals) then
            sb.Append(S[i]);
    end;

    Result := sb.ToString;

  finally
    sb.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.658 Beiträge
 
Delphi 12 Athens
 
#10

AW: Wie kann man diesen Code optimieren

  Alt 10. Apr 2025, 18:24
Das erinnert mich ein wenig an diesen Thread.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz