Aktuelle Zeit: 23.10.2018 10:37

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: [gelöst] String A ungefähr wie String B
BeitragVerfasst: 14.10.2007 21:01 
Offline
Benutzeravatar

Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf
moin, moin...

Ich würde in meine App gerne einen kleinen Sicherheitscheck einbauen, damit nich aus Dusseligkeit zusätzliche Daten zu einem falschen Datensatz hinzugefügt werden.
Der Titel des Films sei In einem Land vor unserer Zeit -8- Der erste Schnee.
Auf CD/DVD könnte der Filename aber anders/flasch geschrieben: In einem Land vor unserer Zeit -VIII - Der erste Schne.avi.
Oder abgürzt sein: IeLvuZ 8 - Der erste Schnee.

Kennt jemand eine Funktion/Prozedure, die mir nicht sagt, daß die beiden nicht gleich sind, sondern daß nur eine Übereinstimmung von x % besteht ?

mdv... scholly

_________________
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)


Zuletzt geändert von scholly am 17.05.2008 14:02, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 14.10.2007 21:03 
Offline
Benutzeravatar

Registriert: 15.04.2007 17:58
Da gibt es in der Tat einen Algorithmus, schau mal hier: http://de.wikipedia.org/wiki/Levenshtein-Distanz

_________________
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: String A ungefähr wie String B
BeitragVerfasst: 14.10.2007 21:04 
Offline

Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
scholly hat geschrieben:
Kennt jemand eine Funktion/Prozedure, die mir nicht sagt, daß die beiden nicht gleich sind, sondern daß nur eine Übereinstimmung von x % besteht ?


Kann mir nicht vorstellen das es soetwas gibt...
Musst du schon selbst machen...


//Edit:
milan1612 hat geschrieben:
Da gibt es in der Tat einen Algorithmus, schau mal hier: http://de.wikipedia.org/wiki/Levenshtein-Distanz


tja :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 14.10.2007 21:05 
Offline
Benutzeravatar

Registriert: 15.04.2007 17:58
Hier hab ich eine VB Implementation gefunden, muss halt übersetzen:
http://www.merriampark.com/ld.htm#VB

_________________
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 14.10.2007 21:28 
Offline
Benutzeravatar

Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf
milan1612 hat geschrieben:
Da gibt es in der Tat einen Algorithmus, schau mal hier: http://de.wikipedia.org/wiki/Levenshtein-Distanz
...
Hier hab ich eine VB Implementation gefunden, muss halt übersetzen: http://www.merriampark.com/ld.htm#VB


Puh... starker Tobak fürn Anfänger....
Mal sehn ob ich damit was basteln kann...

Verrätst Du mir vielleicht, warum Deine Antworten so schnell kamen ?

Danke... scholly

_________________
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 14.10.2007 21:28 
Online
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
ich habe eins in PB geschrieben:

Code:

Procedure.f Splitten(Str$, String$)
 Prozent.f
 l = Len(Str$)
 If l > 1
  Links$ = Mid(Str$, 1, Int(l/2))
  Rechts$ = Mid(Str$, Int(l/2)+1, Len(Str$))
  If FindString(String$,Links$,1)
   Prozent + 0.5
  Else
   Prozent + 0.5*Splitten(Links$, String$)
  EndIf
  If FindString(String$,Rechts$,1)
   Prozent + 0.5
  Else
   Prozent + 0.5*Splitten(Rechts$, String$)
  EndIf
 Else
  If FindString(String$,Str$,1)
   Prozent + 1
  EndIf
 EndIf
 ProcedureReturn Prozent
EndProcedure
Procedure.f StringVergleich(String1$, String2$)
 ProcedureReturn Splitten(String1$, String2$)
EndProcedure

Debug StringVergleich("Wort", "Wort")
Debug StringVergleich("Wort", "Mord")
Debug StringVergleich("In einem Land vor unserer Zeit -VIII - Der erste Schne.avi", "In einem Land vor unserer Zeit -8- Der erste Schnee")

Debugger :
Code:
1.000000
0.500000
0.968750

1 = 100% Übereinstimmend
0 = 0% keine Übereinstimmung

EDIT:

Das Programm ist aber nicht sehr zuverlässig: Denn bei "ABCD" und "DCBA" erhalte ich auch 1.00, da ja alle Zeichen rine vorkommen...
Ich werde also noch weiter dran verbessern

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 14.10.2007 21:54 
Offline
Benutzeravatar

Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf
:shock: Ich fall vom Glauben ab :shock:

STARGÅTE hat geschrieben:
ich habe eins in PB geschrieben:...

Das Programm ist aber nicht sehr zuverlässig: Denn bei "ABCD" und "DCBA" erhalte ich auch 1.00, da ja alle Zeichen rine vorkommen...
Ich werde also noch weiter dran verbessern
:praise: :praise: :praise:
Ich hab zwar noch keinen Praxistext machen können, weil das hier so schnell ging und ich nebenbei Snooker kucke, aber in der Realität sieht das eher so aus:
Ich/man legt eine CD/DVD ein und wählt dann aus den vorhandenen Filmen den aus, für den in der DB Daten fehlen.
Zumindest bei mir ist es bei Spielfilmen sehr unwahrscheinlich, daß auf einem Medium welche sind, deren Namen sich ähnlich anhören (Debug > 0.5 ;)).
Bei Konzerten, Musik-Videos oder Dokus könnte das aufgrund des längeren Filenamens eher sein, aber ich werde das mal mit nem schicken Requester zur Kenntnis bringen und dann ist der Anwender hoffentlich wach ;)

Wenn ich könnte, würde ich jetzt Dankbarkeits- oder Anerkennungspunkte vergeben ;)

Danke, das Ihr das Forum zu dem macht, was (nicht nur) ich so schätze.

immernoch verblüfft... scholly

_________________
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 14.10.2007 22:39 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Also so schwer war der VB-Code ja nun wirklich nicht.
Das hättest du bestimmt auch hingekriegt:

Code:
;*******************************
;*** Get minimum of three values
;*******************************

Procedure.l Minimum(a.l, b.l, c.l)
   Protected mi.l

   mi = a
   If b < mi
      mi = b
   EndIf
   If c < mi
      mi = c
   EndIf

   ProcedureReturn mi
EndProcedure

;********************************
;*** Compute Levenshtein Distance
;********************************
Procedure.f LD(s.s, t.s)
   Protected m.l = Len(t), n.l = Len(s), i.l, j.l, s_i.s, t_j.s, cost.l, Result.f

   ; Step 1
   If n = 0
      If m = 0
         ProcedureReturn 100
      Else
         ProcedureReturn 0
      EndIf
   EndIf
   If m = 0
      ProcedureReturn 0
   EndIf

   Dim d.l(n, m)

   ; Step 2
   For i = 0 To n
      d(i, 0) = i
   Next i

   For j = 0 To m
      d(0, j) = j
   Next j

   ; Step 3
   For i = 1 To n
      s_i = Mid(s, i, 1)

      ; Step 4
      For j = 1 To m

         t_j = Mid(t, j, 1)

         ; Step 5
         If s_i = t_j
            cost = 0
         Else
            cost = 1
         EndIf

         ; Step 6
         d(i, j) = Minimum(d(i - 1, j) + 1, d(i, j - 1) + 1, d(i - 1, j - 1) + cost)

      Next j
   Next i

   ; Step 7
   Result = (m - d(n, m)) / m
   ProcedureReturn Result * 100
EndProcedure

Debug LD("Wort", "Wort")
Debug LD("Wort", "Mord")
Debug LD("abcd", "dcba")
Debug LD("In einem Land vor unserer Zeit -8 - Der erste Schnee", "In einem Laind vor unserer Zeit -8 - Der erste Schnee")

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 14.10.2007 22:52 
Offline
Benutzeravatar

Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf
HeX0R hat geschrieben:
Also so schwer war der VB-Code ja nun wirklich nicht.
Das hättest du bestimmt auch hingekriegt:

Mag sein, aber STARGÅTE war zu schnell ;)

_________________
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 15.10.2007 22:52 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
@Hexor,

Sehr gut zu verwenden :allright:
Code:
Debug LD("In einem Land vor unserer Zeit -8 - Der erste Schnee", "Ein Land vor unserer Zeit -8 - Der erste Schnee")

Immer noch knap 90% Treffer.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye