Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Vergleichen von 2 Strings (prozentual) (https://www.delphipraxis.net/154811-vergleichen-von-2-strings-prozentual.html)

Sir Rufo 26. Sep 2010 14:58

AW: Vergleichen von 2 Strings (prozentual)
 
Zitat:

Zitat von hans ditter (Beitrag 1052146)
@ Sir Rufo
Mein Gott ist die Funktion lang... ist der Aufwand wirklich nötig, um 2 Strings miteinander zu vgl??

Wenn Du einen Fuzzy-Vergleich haben möchtest -> JA
Ansonsten -> NEIN

Mit einem Fiat 500 komm ich auch an, mit einem Lambo Diablo auch, macht aber mehr Spaß (gut säuft auch Sprit wie Hulle)
Entscheide was du möchtest ;)

hans ditter 26. Sep 2010 15:00

AW: Vergleichen von 2 Strings (prozentual)
 
Ja, im Prinzip schon, aber ich bin der Ansicht, dass man Probleme mit möglichst wenigen Wörtern umschreibt (das war metaphorisch gemeint... :D), heisst, den Quellcode so schmal wie möglich zu halten.

Chillkröte 26. Sep 2010 15:01

AW: Vergleichen von 2 Strings (prozentual)
 
@stahli, danke für diese Prozeduren: Übereinstimmung von 94%
jetzt muss ich mich durch den code kämpfen, um den zu verstehen

@sir rufo, hans ditter
danke ich werd mir auch die mal angucken

Sir Rufo 26. Sep 2010 15:08

AW: Vergleichen von 2 Strings (prozentual)
 
Ob der entsprechende Such-Algorithmus deinen Ansprüchen genügt kannst du nur herausfinden, wenn du mehrere Suchbeispiele durch die Algorithmen laufen lässt.

Wichtig ist dabei nicht nur Beispiele zu nehmen mit erwarteten Treffern, sondern auch negativ Beispiele, wo ein möglichst geringer Treffer-Wert geliefert werden soll.

Je nach Anwendungsfall kann es auch notwendig sein unterschiedliche Algorithmen zu kombinieren.

Meine Funktion liefert z.B. bei "Peter und der Wolf" und "Peter Wolf und der" 100% Treffer-Quote
Ist ja eben Fuzzy-Logic

Wenn ich solche Treffer nicht haben möchte, dann kann ich die Fuzzy-Suche knicken.

Vielleicht sollten wir mal solche String-Vergleicher sammeln inkl. einer Test-Suite, wo man unterschiedliche Vergleichs-Strings einträgt und dann die Ergebnisse vergleichen und verknüpfen kann.

Dann kann man sich den besten Algorithmus(-Cocktail) raussuchen.

himitsu 26. Sep 2010 15:16

AW: Vergleichen von 2 Strings (prozentual)
 
Es gibt auch noch die Levenshtein-Distanz, welcher die Anzahl der nötigen Änderungen zählt, welche man braucht um aus dem einen den anderen String zu machen.

Je kleiner die Zahl, umso gleicher sind die Strings.

Delphi-Quellcode:
Prozent = 100 * LevenshteinDistanz div Max(Length(Str1), Length(Str2))
.



Auch SoundEx prüft auf gewisse Ähnlichkeiten.



Wenn Groß-/Kleinschreibung egal sind und der Algorithmus dieses mit auswertet, dann halt vorher noch beide String durch AnsiUpperCase jagen.

Wenn Sonderzeichen egal sind und diese ebenfalls vom Algo beachtet werden, dann diese eben vorher entfernen/rausfiltern.

(oder den Algo entsprechend abändern)




Also im Prinzip müßte man erstmal genau definieren was du unter "gleich" verstehst
und daraus leitet sich dann der nötige Algorithmus ab, welchen man verwenden könnte.

Chillkröte 26. Sep 2010 15:25

AW: Vergleichen von 2 Strings (prozentual)
 
ok ich erklär erstmal wofür ich das brauch.
vielleicht wird es dadurch klarer

wie ihr vielleicht schon festgestellt habt geht es um Videos und Filme.
Einige davon könnten in oben genannten Dateinamen abgespeichert worden sein.
Dazu habe ich eine Liste mit den normalen Dateinamen.

Diese sollen jetzt verglichen werden.
Demnach wäre die Fuzzy-Funktion nicht brauchbar. Sie liefert zwar ein relativ positives Ergebnis, aber die Reihenfolge wird dabei nicht betrachtet.

Reihenfolge und Zeichen sind demnach ausschlaggebend

die groß- und kleinschreibung spielt durch AnsiUpperCase bzw LowerCase keine Rolle
genauso wie sonderzeichen wie punkte oder unterstriche
das müsste man dann anpassen

hans ditter 26. Sep 2010 15:29

AW: Vergleichen von 2 Strings (prozentual)
 
hm, Groß- und Kleinschreibung ist aber schon wichtig, wenn du 2 Dateinamen vergleichen willst...
Es könnte ja sein, dass sich jemand vertippt hat und statt 'Bourne Ultimatum', 'Bourne uLtimatum' geschrieben hat. Dann weicht die Gleichheit schon ab, obwohl es sich (wahrscheinlich) um den gleichen Film handelt...

mkinzler 26. Sep 2010 15:35

AW: Vergleichen von 2 Strings (prozentual)
 
Dann könnte mn ja vorher beide Strings in Groß- oder Kleinbuchstaben wandeln.
U.U. wäre auch SoudEx dass richtige

Chillkröte 26. Sep 2010 15:38

AW: Vergleichen von 2 Strings (prozentual)
 
wenn man das eintippt und gleichzeitig die Konvertierung beider strings zu
BOURNE ULTIMATUM stattfindet ist die gleichheit wieder gegeben

es geht eig nur darum, ob der dateiname "blablablaaaaa-Film[oder Video]name.blablabla" dem Film- oder Videonamen aus der liste gleicht

mkinzler 26. Sep 2010 15:39

AW: Vergleichen von 2 Strings (prozentual)
 
Zitat:

und gleichzeitig die Konvertierung beider strings zu
BOURNE ULTIMATUM stattfindet ist die gleichheit wieder gegeben
Das meinte ich mit in Großbuchstaben wandeln


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
Seite 2 von 3     12 3      

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