Jaro-winkler benzerliğine giriş (tanım ve örnek)
İstatistikte Jaro-Winkler benzerliği iki dize arasındaki benzerliği ölçmenin bir yoludur.
İki dize arasındaki Jaro benzerliği (sim j ) şu şekilde tanımlanır:
sim j = 1/3 * ( m /|s 1 | + m/|s 2 | + (mt)/m )
Altın:
- m : Eşleşen karakter sayısı
- S 1 ve s 2’nin iki karakteri aynıysa ve birbirlerinden [max(|s 1 |, |s 2 |) / 2] – 1 karakterden fazla değilse eşleştiği kabul edilir.
- |s 1 | , |s 2 | : Sırasıyla birinci ve ikinci dizelerin uzunluğu
- t : Aktarım sayısı
- Eşleşen karakter sayısının (ancak farklı bir sıra sırasıyla) 2’ye bölünmesiyle hesaplanır.
Jaro-Winkler benzerliği (sim w ) şu şekilde tanımlanır:
sim w = sim j + lp(1 – sim j )
Altın:
- sim j : İki dize (s 1 ve s 2) arasındaki Jaro benzerliği
- l : Dizenin başlangıcındaki ortak önekin uzunluğu (en fazla 4 karakter)
- p : Ortak öneklere sahip olmak için puanın ne kadar yukarıya doğru ayarlandığını gösteren ölçeklendirme faktörü. Tipik olarak bu, p = 0,1 olarak tanımlanır ve p = 0,25’i aşmamalıdır.
İki dize arasındaki Jaro-Winkler benzerliği her zaman 0 ile 1 arasındadır; burada:
- 0, dizeler arasında benzerlik olmadığını gösterir
- 1, dizelerin tam olarak eşleştiğini gösterir
Not : Jaro-Winkler mesafesi 1 – sim w olarak tanımlanacaktır.
Aşağıdaki örnekte iki dize arasındaki Jaro-Winkler benzerliğinin pratikte nasıl hesaplanacağı gösterilmektedir.
Örnek: iki dize arasındaki Jaro-Winkler benzerliğinin hesaplanması
Aşağıdaki iki dizeye sahip olduğumuzu varsayalım:
- Kanal 1 (s 1 ): fare
- Kanal 2 (s 2 ): sessiz
Öncelikle bu iki string arasındaki Jaro benzerliğini hesaplayalım:
sim j = 1/3 * ( m /|s 1 | + m/|s 2 | + (mt)/m )
Altın:
- m : Eşleşen karakter sayısı
- S 1 ve s 2’nin iki karakteri aynıysa ve birbirlerinden [max(|s 1 |, |s 2 |) / 2] – 1 karakterden fazla değilse eşleştiği kabul edilir.
Bu durumda [max(|s 1 |, |s 2 |) / 2] – 1, 5/2 – 1 = 1,5 olarak hesaplanır. Karşılık gelen üç harfi tanımlarız: m, u, e. Yani m = 3 .
- |s 1 | , |s 2 | : Sırasıyla birinci ve ikinci dizelerin uzunluğu
Bu durumda, |s 1 | = 5 ve |s 1 | = 4 .
- t : Aktarım sayısı
- Eşleşen karakter sayısının (ancak farklı bir sıra sırasıyla) 2’ye bölünmesiyle hesaplanır.
Bu durumda eşleşen üç karakter vardır ancak bunlar zaten aynı sıralı sıradadır, yani t = 0 .
Yani Jaro benzerliğini şu şekilde hesaplayabiliriz:
sim j = 1/3 * (3/5 + 3/4 + (3-0)/3) = 0,78333.
Daha sonra Jaro-Winkler benzerliğini (sim w ) şu şekilde hesaplayalım:
sim w = sim j + lp(1 – sim j )
Bu durumda şunu hesaplayacağız:
sim w = 0,78333 + (1)*(0,1)(1 – 0,78333) = 0,805.
İki zincir arasındaki Jaro-Winkler benzerliği 0,805’tir .
Bu değerin 1’e yakın olması bize iki dizenin çok benzer olduğunu söyler.
R’deki iki dize arasındaki Jaro-Winkler benzerliğini hesaplayarak bunun doğru olduğunu doğrulayabiliriz:
library (stringdist) #calculate Jaro-Winkler similarity between 'mouse' and 'mute' 1 - stringdist("mouse", "mute", method = "jw", p= 0.1 ) [1] 0.805
Bu bizim manuel olarak hesapladığımız değere karşılık geliyor.
Ek kaynaklar
Aşağıdaki eğitimlerde diğer benzerlik metriklerinin nasıl hesaplanacağı açıklanmaktadır:
Bray-Curtis farklılığına giriş
Jaccard benzerlik indeksine giriş