AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Texte auf Ähnlichkeit vergleichen

Ein Thema von Stanlay Hanks · begonnen am 6. Mai 2003 · letzter Beitrag vom 6. Mai 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#1

Texte auf Ähnlichkeit vergleichen

  Alt 6. Mai 2003, 17:15
Hallo zusammen. Ich hab mir hier eine Funktion geschrieben, die, wenn zwei texte ungefähr gleich sind, true zurückgibt. Aber irgendwo hab ich einen Fehler:

Delphi-Quellcode:
function TSuchenForm.FehlerToleranz(FehlerStr, VergleichStr: String;
  Toleranzwert: Integer): Boolean;
var j, fehler: Integer;
begin
For j := 0 to Length(FehlerStr) do begin
 IF FehlerStr[j] <> VergleichStr[j] THEN //Hier wird jeder der Zeichen der zwei texte verglichen
    fehler := fehler +1;
end;
IF Fehler <= ((Toleranzwert / 100) * Fehler) THEN //Wahrscheinlich hab ich hier einen Fehler gemacht, beim ausrechnen des Prozentsatzes
FehlerToleranz := true;
end;
Danke. Man liest sich. Stanlay 8)
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#2
  Alt 6. Mai 2003, 17:18
Hallo,

lass Deine Schleife besser bei 1 beginnen, anstatt bei 0.
Ausserdem wäre es das nächste mal Sinnvoller auch zu sagen was denn genau nicht geht.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3
  Alt 6. Mai 2003, 17:21
Wenn Du ein Delphi3000 Abo hast, schau Dir mal den Artikel an: http://www.delphi3000.com/articles/article_2240.asp

Ansonsten suche mal im Internet nach: "Damerau-Levenshtein-Metric for string comparsion". Ist zwar nicht Deine Lösung, aber eine der besten für Dein Ziel.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#4
  Alt 6. Mai 2003, 17:23
Hallo Daniel. Erstmal Danke für die Hilfe. Ich dachte, dass das Text[] Ding nullbasiert ist. Aber leider geht es dehalb auch noch nicht. Zu deiner Anmerkung: Alles geht nicht. Er kompiliert und dann passiert: Nichts. Gar nix: Ich hab die Funktion so aufgerufen:

Delphi-Quellcode:
IF FehlerToleranz(Edit6.Text,Edit7.Text,50) = true THEN
ShowMessage('Akzeptabel');
Aber wahrscheinlich hab ich zuviele Fehler gemacht (Sowhl in der Funktion als auch im Aufruf).

Man liest sich. Stanlay
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#5
  Alt 6. Mai 2003, 17:31
Hallo,
Zitat von Stanlay Hanks:
Hallo Daniel. Erstmal Danke für die Hilfe. Ich dachte, dass das Text[] Ding nullbasiert ist.
Nun, eigentlich lässt man Schleifen von 0 to Length() -1, oder 1 to Length() laufen.
Zitat:
Aber leider geht es dehalb auch noch nicht. Zu deiner Anmerkung: Alles geht nicht. Er kompiliert und dann passiert: Nichts. Gar nix: Ich hab die Funktion so aufgerufen:
Delphi-Quellcode:
IF FehlerToleranz(Edit6.Text,Edit7.Text,50) = true THEN
ShowMessage('Akzeptabel');
Aber wahrscheinlich hab ich zuviele Fehler gemacht (Sowhl in der Funktion als auch im Aufruf).
Nun, der Wert müsste dann kleiner 25 sein, der Formel und dem Aufruf sein, die Frage ist, was steht in dem einen und was in dem anderen Edit?!
Kleiner Tip noch, wenn Du schon auf True abfrägst:
Delphi-Quellcode:
IF FehlerToleranz(Edit6.Text, Edit7.Text, 50) THEN
ShowMessage('Akzeptabel');
Reicht auch schon.
Versuch aml folgendes, um sicher zu sein das die Funktion überhaupt funktioniert:
Nimm den Toleranzwert raus, auch aus dem Aufruf, schreib in einem Edit Hans und im anderen Wurst rein, oder sonst was. Und schau einfach ob Du jemals überhaupt ein Ergebniss von der Funktion bekommst, es reicht ja wenn Du es durchDebuggst, siehst eh besser was los ist, anstatt immer auf ne blöde Message zu warten die nie kommt.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#6
  Alt 6. Mai 2003, 17:34
Das mit dem Probieren ist wohl wahr. Danke erst mal, für deine Schnelle Hilfe. Ich muss das jetzt erst mal "verarbeiten". Wenns nicht geht schreib ich halt einfach noch mal was nicht geht.

Danke. Stanlay
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#7
  Alt 6. Mai 2003, 17:43
Ich hab aus obiger Funktion, wie du gesagt hast, den Tolreanzwert rausgenommen und, zur Kontrolle, festgelegt, dass am Ende der Funktion die Fehleranzahl in die Titelleiste geschrieben wird. Und da steht dann
4438752 Und das obwohl im einen Edit Edit6 und im anderen Edit7 steht. also genau ein Zeichen unterschied. Wie kann das gehen???
  Mit Zitat antworten Zitat
Basic-Master

Registriert seit: 9. Mär 2003
Ort: Brilon
395 Beiträge
 
Delphi 2007 Enterprise
 
#8
  Alt 6. Mai 2003, 17:48
hmm versuch mal statt / div zu nehmen...
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

Registriert seit: 1. Mär 2003
2.078 Beiträge
 
Delphi 2005 Professional
 
#9
  Alt 6. Mai 2003, 17:54
Wie gesagt. ich hab aus obiger funkion den Toleranzwert rausgenommen. Hab also nix mehr zum teilen.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#10
  Alt 6. Mai 2003, 18:06
Hallo,

hier ist mal ein bisschen Code der Sicherlich funktioniert.
Nimm einfach zwei Edits und ein Button.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  iFor, iFehler: integer;
begin
  iFehler := 0;
  for iFor := 0 to Length(Edit1.Text) do
  begin
    if Edit1.Text[iFor] <> Edit2.Text[iFor] then
      Inc(iFehler);
  end;
  ShowMessage(IntToStr(iFehler));
end;
Das ganze basiert natürlich da drauf, das die Länge der Texte in den Edits, absolut gleich ist, daher Vermute ich die utopische Zahl von oben, das Du im zweiten Edit warscheinlich ein kürzeres Wort hast.

Grüsse, Daniel
  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 23:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz