Post by Gucky_87 » 21 Feb 2018, 06:41
Halloliho,
bezugnehmend auf meinen
Post 'Straßen- und Ortsnamen korrekt schreiben' fiel mir ein, dass ich vor etlichen Jahren schon einmal (ich denke in einem uralt AHK Forum) eine Ähnliche Frage gestellt und es entstand in Zusammenarbeit mit einigen User dort ein Script, mit dem man die Ähnlichkeit 2er Strings beurteilen, bzw. ermitteln konnte.
Leider ist dieses Script weder im Netz auffindbar, noch habe ich selber es noch irgendwo gespeichert.
Ich hatt es in irgendein Tool eingebaut, kann mich aber nicht mehr so wirklich erinnern.
Daher habe ich nach langer Suche nun beschlossen, quasi neu anzufangen. Grundlage für mein Script war damals, so weit ich mich einnern kann, de Ermittlung der
Levenshtein-Distanz. Ich habe bisher folgenden Code, der auch gut funktioniert:
Code: Select all
DLDist(s, t)
{
StringLen, m, s
StringLen, n, t
If m = 0
Return, n
If n = 0
Return, m
d0_0 = 0
Loop, % 1 + m
d0_%A_Index% = %A_Index%
Loop, % 1 + n
d%A_Index%_0 = %A_Index%
ix = 0
iy = -1
Loop, Parse, s
{
sc = %A_LoopField%
i = %A_Index%
jx = 0
jy = -1
Loop, Parse, t
{
a := d%ix%_%jx% + 1, b := d%i%_%jx% + 1, c := (A_LoopField != sc) + d%ix%_%jx%, d%i%_%A_Index% := d := a < b ? a < c ? a : c : b < c ? b : c
If (i > 1 And A_Index > 1 And sc == tx And sx == A_LoopField)
d%i%_%A_Index% := d < c += d%iy%_%ix% ? d : c
jx++
jy++
tx = %A_LoopField%
}
ix++
iy++
sx = %A_LoopField%
}
Return, d%m%_%n%
}
Mein Ansinnen ist es, eine Routine zu erstellen, die z.B. einen Prozentwert (0.00 - 100.00) ausgibt, der direkt etwas darüber aussagt, wie ähnlich sich
String 1 und
String 2 sind.
Vielleicht kann mir ja jemand helfen.
Gucky.
Halloliho,
bezugnehmend auf meinen [url=https://autohotkey.com/boards/viewtopic.php?p=201367#p201367][b]Post 'Straßen- und Ortsnamen korrekt schreiben'[/b][/url] fiel mir ein, dass ich vor etlichen Jahren schon einmal (ich denke in einem uralt AHK Forum) eine Ähnliche Frage gestellt und es entstand in Zusammenarbeit mit einigen User dort ein Script, mit dem man die Ähnlichkeit 2er Strings beurteilen, bzw. ermitteln konnte.
Leider ist dieses Script weder im Netz auffindbar, noch habe ich selber es noch irgendwo gespeichert.
Ich hatt es in irgendein Tool eingebaut, kann mich aber nicht mehr so wirklich erinnern.
Daher habe ich nach langer Suche nun beschlossen, quasi neu anzufangen. Grundlage für mein Script war damals, so weit ich mich einnern kann, de Ermittlung der [url=https://de.wikipedia.org/wiki/Levenshtein-Distanz][b]Levenshtein-Distanz[/b][/url]. Ich habe bisher folgenden Code, der auch gut funktioniert:
[code]
DLDist(s, t)
{
StringLen, m, s
StringLen, n, t
If m = 0
Return, n
If n = 0
Return, m
d0_0 = 0
Loop, % 1 + m
d0_%A_Index% = %A_Index%
Loop, % 1 + n
d%A_Index%_0 = %A_Index%
ix = 0
iy = -1
Loop, Parse, s
{
sc = %A_LoopField%
i = %A_Index%
jx = 0
jy = -1
Loop, Parse, t
{
a := d%ix%_%jx% + 1, b := d%i%_%jx% + 1, c := (A_LoopField != sc) + d%ix%_%jx%, d%i%_%A_Index% := d := a < b ? a < c ? a : c : b < c ? b : c
If (i > 1 And A_Index > 1 And sc == tx And sx == A_LoopField)
d%i%_%A_Index% := d < c += d%iy%_%ix% ? d : c
jx++
jy++
tx = %A_LoopField%
}
ix++
iy++
sx = %A_LoopField%
}
Return, d%m%_%n%
}
[/code]
Mein Ansinnen ist es, eine Routine zu erstellen, die z.B. einen Prozentwert (0.00 - 100.00) ausgibt, der direkt etwas darüber aussagt, wie ähnlich sich [i]String 1[/i] und [i]String 2[/i] sind.
Vielleicht kann mir ja jemand helfen.
Gucky.