2013-09-03 1 views
5

for Computing Jaro odległości dwóch ciąg używamy tego równania:jak obliczyć "m" w odległości Jaro Winklera?

dj = 1/3 (m/| s1 | + m/| S2 | + (mt)/m)

Jak należy obliczyć "m" dla dwóch ciągów w tym równaniu?

Jeśli "m" jest różnicą między dwoma łańcuchami, dlaczego przykład przy Wikipedia dla dwóch ciągów "MARTHA" i "MARHTA", m wynosi 6. Myślę, że powinno być 1, ponieważ różnica między ciągami to 1, a nie 6! Czy mam rację?

+2

m to liczba pasujących znaków między dwoma ciągami, która wynosi 6 w twoim przypadku. – rakeshjain

+0

Przykład Wikipedii (http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance#Example) wykonuje świetną robotę przechodząc przez twój dokładny problem, więc jaki jest prawdziwy problem? – AndyG

+0

@ AndyG: Nie rozumiem, jak obliczyć m i t! w przykładzie Wikipedii, dla "MARTHA" i "MARHTA", m = 6, oznacza wszystkie te same znaki, ale dla "CRATE" i "TRACE", m = 3, oznacza to wszystkie te same znaki w tej samej kolejności, więc dla "MARTHA" i "MARHTA", m powinno być 4, ponieważ T i H nie są w tej samej kolejności w dwóch strunach! –

Odpowiedz

7

m to liczba znaków, które są współdzielone między dwoma ciągami, niezależnie od ich położenia, a ich odległość nie jest większa niż d = floor(max(len(String1), len(String2))/2) - 1 (dzięki Michaelowi Foukarakisowi). To jest 6 dla MARTHA i MARHTA.

t jest liczba znaków, które są wspólne, ale są w różnych pozycjach, podzielona przez 2. W tym przypadku, 2 znaki (H i T) są wspólne, ale są w różnych pozycjach tak t = 2/2 = 1.

+5

Nie do końca poprawne - dwa znaki pasują tylko wtedy, gdy są takie same i nie dalej niż 'd = podłoga (max (len (String1), len (String2))/2) - 1'. –

+0

ok, ale jest tutaj inny przykład, który obliczył m i t w inny sposób, dla "CRATE" i "TRACE", jak powiedziałeś, m powinno być 5, ponieważ wszystkie znaki są wspólne dla dwóch ciągów, ale m = 3! Nie wiem dlaczego ?! i t powinno wynosić 1 (C i T), ale t = 0! czy mógłbyś mi to wyjaśnić? –

+0

@MichaelFoukarakis Dzięki, poprawione. – Bitwise