Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]1030[/thread]

VBScript Fuzzy Search



<< >> 8 Einträge, 1 Seite
kabel
 2004-08-03 14:08
#10497 #10497
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ich hab da noch ne idee ...

zuerst kann ich ja pruefen ob die anzahl substrings etwa gleich ist (plus minus 1).
je nachdem erhoehe oder erniedrige ich den score.

dann lasse ich den i-ten substring aus beiden weg und guck mir das ergebnis an.
wenn die vereinheitlichten strings dann gleich sind, wird der score entsprechend erhoeht.
-- stefan
kabel
 2004-08-03 14:53
#10498 #10498
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
ahem, da gibts mehr als ein modul ... ;-p

wie gross ist der unterschied zwischen vb und vb script?
bevor ich mir nen kopf zwecks unscharfer suche mach, zeige ich lieber ne auswahlliste an und missbrauche dann das gehirn des benutzers als fuzzy search processor. hehe
auswahllisten gehen leider nicht mit vbscript, da gibts nur MsgBox ...
-- stefan
esskar
 2004-08-03 15:12
#10499 #10499
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ist gibt msgbox; du kannst aber

* eine c++ com dll schreiben, die du aufrufst. :)
* du kannst jede com dll in vbs aufrufen, und fenster anzeigen
* du kannst den user über die console fragen!
* mach ne asp seite draus und zeig es über den browser an
kabel
 2004-08-03 16:13
#10500 #10500
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
danke dubu! funktioniert dem anscheine nach. :)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
' lehvenshsteinsche distance
' http://de.wikipedia.org/wiki/Levenshtein-Distanz
Function match (str1, str2)
Dim Matrix (), str1len, str2len, i, j, cost, m1, m2, m3

If (Not ((IsNull (str1) Or IsNull (str2)))) Then

str1len = Len (str1)
str2len = Len (str2)
ReDim Matrix (str1len + 1, str2len + 1)

' populate the matrix
For i=0 To str1len
Matrix(i, 0) = i
Next
For j=0 To str2len
Matrix(0, j) = j
Next

For i=1 To str1len
For j=1 to str2len

If (Mid (str1, i, 1) = Mid (str2, j, 1)) Then

cost = 0

Else

cost = 1

End If


m1 = Matrix (i-1, j) + 1

m2 = Matrix (i, j-1) + 1

m3 = Matrix (i-1, j-1) + cost


If ((m1 <= m2) And (m1 <= m3)) Then

Matrix (i, j) = m1

End If

If ((m2 <= m1) And (m2 <= m3)) Then

Matrix (i, j) = m2

End If

If ((m3 <= m2) And (m3 <= m1)) Then

Matrix (i, j) = m3

End If
Next
Next

match = Matrix(str1len - 1, str2len - 1)

Else
match = 667
End If

End Function

vorsicht mit den bloecken ...


jetzt gilt es noch eine zahl n zu finden, so dass alle treffer die ich haben will, eine distanz kleiner n haben. ich teste grad mal fuer n=20, aber da sind noch einige false positives dabei, die eine distanz von 17-19 haben ..
-- stefan
kabel
 2004-08-03 13:58
#10501 #10501
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
wie kann ich zwei strings unscharf vergleichen?
hier mal ein beispiel:

string1 "Numerik partieller Diff.gleichungen"
string2 "Numerik partieller Differentialgleichungen"

ich hatte zuerst gedacht, ich splitte den string1 an den leerzeichen und mach dann ein Index (), wenn der was findet, inkrementiere ich einen score. die score gibt an, wie gut die strings zueinanderpassen.

das funktionier aber net so gut.
wenn ueberhaupt nix hilft, dann werd ich an meiner methode solange rumschrauben, bis sie sagen wir mal 50% findet ... wenn ich ueberhaupt in die groessenordnung komme ...

alternative waere natuerlich interaktion mit dem benutzer, aber da muss ich imo auf vb wechseln, und vb und vbs sind afaik nicht generell syntaxkompatibel.
-- stefan
renee
 2004-08-03 14:16
#10502 #10502
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich kann zwar keinen Code liefern, aber im Bio::*-Namensraum gibt es glaube ich etwas, dass Homologien berechnet. Das wäre ja soetwas in der Richtung...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2004-08-03 15:00
#10503 #10503
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Verbreitete Ansaetze fuer unscharfe Suche und Vergleiche sind die Levenshtein-Distanz oder q-gram-Algorithmen (hier werden Strings in Buchstabenfolgen aufgeteilt und diese verglichen). Zusaetzlich gibt's noch primaer phonetische Ansaetze (z.B. soundex, metaphone), die aber oft nur fuer englischsprachige Texte ausgelegt werden.
kabel
 2004-08-03 15:22
#10504 #10504
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
danke fuer die ansaetze.
asp wird net gehen, hier ist kein iis.
lehvenshtein-distanz sieht einfach aus, den werd ich gleich implementieren :)

thx
-- stefan
<< >> 8 Einträge, 1 Seite



View all threads created 2004-08-03 14:08.